1 votos

Crear un nuevo elemento/objeto en AppleScript

Estoy intentando automatizar el archivo de recibos electrónicos en una aplicación de archivo digital llamada Paperless de Mariner Software .

Dentro del diccionario Paperless AppleScript, se define lo siguiente para un recibo (clase/tipo de datos):

receipt n \[inh. library item\] : A receipt. 
elements contained by .

properties 
merchant (text) : The merchant's name. 
amount (text) : amount of the receipt (as a string); can include currency symbol 
tax (text) : tax or VAT of the receipt (as a string); can include currency
symbol 
payment method (text) : method of payment 
category (text) :
category of receipt 
notes (text) : notes for the receipt 
date (date) : date of the receipt 
custom 1 (text) : custom data 1 
custom 2 (text) : custom data 2 
custom 3 (text) : custom data 3 
file (file) : file reference for the receipt 

responds to add.

En mi AppleScript, intento crear un nuevo recibo con el siguiente código:

set MerchantID to "Apple -- testing"

tell application "Paperless"
activate
add  receipt with properties {merchant:MerchantID}
end tell

Sin embargo, falla con el siguiente error:

error "Paperless got an error: Can’t make receipt into type library item." number -1700 from receipt to library item

Lo que me confunde del error es que estoy intentando hacer un recibo que es una clase que hereda del tipo más general artículo de la biblioteca .

¿Puede alguien explicar cómo crear un nuevo artículo basado en clases definidas así?

3voto

qarma Puntos 71

receipt es un elemento que pertenece a algún objeto padre. Como con cualquier instancia de un elemento AppleScript que ya ha sido creado , normalmente será referenciada por index Por ejemplo

receipt 1 of ...

o por name Por ejemplo

receipt "MyNamedReceipt" of ...

o por id Por ejemplo

receipt id "61405882-ee27-4c94-86bb-bcdecc8792ba" of ...

Mi sensación es que el add actuará sobre una instancia de un library item (incluyendo receipt ) que ya existe. Si es así, entonces

add receipt ...

lo más probable es que genere el error que estás viendo, porque receipt es un nombre de clase, donde add estaría esperando un elemento identificable, por ejemplo

add receipt "MyNamedReceipt" ...

Siguiendo la nomenclatura típica del mundo de AppleScript, add normalmente se invocan cuando se desea tomar un objeto preexistente de un lugar e insertarlo/añadirlo a otro. En Paperless Esto podría estar tomando un receipt desde, por ejemplo, una carpeta (o álbum) de recibos, y añadiendo una copia o una referencia (probablemente la última) de ese recibo a una carpeta/álbum diferente.

La forma más común de crear nuevas instancias de un elemento en la mayoría de las aplicaciones AppleScriptable es mediante el make (que forma parte del conjunto estándar que se recomienda que contenga el diccionario de scripts de una aplicación):

hacerv : Crea un nuevo objeto.
     hacer
         nuevo tipo : La clase del nuevo objeto.
        [ en especificador de ubicación ] : La ubicación en la que se inserta el objeto.
        [ con datos cualquier ] : Los datos iniciales del objeto.
        [ con propiedades registro ] : Los valores iniciales de las propiedades del objeto.
    → especificador

Si Paperless incluye el make intente utilizarlo. Tendría una forma similar a:

make new receipt with properties {name:"My Receipt", merchant:"Apple", amount:"$249.99", tax:"$0.00"}

Deberá tener en cuenta qué elemento posee la colección de receipts en el que intentas crear uno nuevo. Si library item es un objeto de aplicación de nivel superior, es decir, propiedad de application entonces el make no debería requerir el comando at (si lo hace, puede ser un parámetro genérico at end of receipts ). Sin embargo, si library item es propiedad de, por ejemplo, un library objeto de clase, entonces el make tiene que ocurrir dentro de tell bloque que apunta a que library (por ejemplo library 1 o library "MyLibrary" ); o necesita el at para describir dónde crear el nuevo receipt Por ejemplo

tell application "Paperless"
        .
        .
        .
    make new receipt at library 1 of document 1
        .
        .
        .
end tell

donde, a efectos ilustrativos, he supuesto que library items están contenidas en libraries están contenidas en documents están contenidas en el application .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X