Hello,
Here is my configuration Alfresco 5.2.4 with ADF 3.4
I'm facing a problem while importing document with a custom property that can take multiple string values.
Here is the content-model.xml
<constraints> <constraint name="multiplePropertylist" type="this.is.my.constraints.CustomConstraint"> <parameter name="allowedValues"> <list></list> </parameter> <parameter name="constraintName"> <value>MultipleProperty</value> </parameter> </constraint> </constraints> <types> <type name="document"> <parent>cm:content</parent> <mandatory-aspects> <aspect>custom:data</aspect> </mandatory-aspects> </type> </types> <aspects> <aspect name="custom:data"> ... <properties> ... <property name="multipleProperty"> <type>d:text</type> <mandatory>true</mandatory> <multiple>true</multiple> <index enabled="true"> <facetable>true</facetable> </index> <constraints> <constraint ref="multiplePropertylist"/> </constraints> </property> </properties> ... </aspect> </aspects>
When I upload a document, the event is stopped and a popup is opened allowing me to modify the properties :
onBeginUpload(event: UploadFilesEvent) { event.pauseUpload(); let listFiles: FileModel[]; listFiles = event.files || []; if (listFiles.length > 0) { const dialogUpload = this.dialog.open(DialogUploadComponent, { width: '1000px', autoFocus: false, data: { files: listFiles, type: 'document', mode: this.mode } }); dialogUpload.afterClosed().subscribe(result => { if (result === 'OK') { event.resumeUpload(); } }); } }
Before closing the DialogUploadComponent popup, properties are setted to all files passed to the popup in listFiles :
uploadFiles() { const values = this.customForm.form.values; this.listFiles.forEach((file: FileModel) => { file.options.nodeType = this.type; const properties = {}; for (const key in values) { if (key !== AppConstants._PROPERTY_CM_NAME) { properties[key] = this.setValue(values[key]); } } file.options['properties'] = properties; }); this.closeDialog('OK'); }
At that point, I can debug the process and see that multiple values are well passed to all files like this :
FileModel {status: 0, file: File, id: undefined, …} data: null errorCode: null extension: (...) file: File {…} id: undefined name: "toto.pdf" options: comment: undefined majorVersion: false newVersion: false nodeType: "document" parentId: "0f208ce6-bf7c-4e7d-8097-2f79d5a6abf8" path: "" properties: ... multipleProperty: (2) ["4", "1"] ... progress: {loaded: 0, total: 0, percent: 0} size: 15659 status: 0
Then the UploadFilesEvent.resumeUpload() is emitted, and the next call is made to the backend :
POST http://localhost:4200/alfresco/api/-default-/public/alfresco/versions/1/nodes/0f208ce6-bf7c-4e7d-8097-2f79dAAAAAaa/children?autoRename=true&include=allowableOperations
Body :
------WebKitFormBoundarybVmxBA5ta4P5neSD Content-Disposition: form-data; name="cm:title" toto.pdf ------WebKitFormBoundarybVmxBA5ta4P5neSD Content-Disposition: form-data; name="multipleProperty" 4 ------WebKitFormBoundarybVmxBA5ta4P5neSD Content-Disposition: form-data; name="multipleProperty" 1 ------WebKitFormBoundarybVmxBA5ta4P5neSD Content-Disposition: form-data; name="include" allowableOperations ... ------WebKitFormBoundarybVmxBA5ta4P5neSD Content-Disposition: form-data; name="autoRename" true ------WebKitFormBoundarybVmxBA5ta4P5neSD Content-Disposition: form-data; name="nodeType" document ------WebKitFormBoundarybVmxBA5ta4P5neSD--
As a result, the document is saved with only one of the two value for the property "multipleProperty".
After that creation, it is possible to modify this property from the UI and add another value successfully, herre is the successful call :
PUT http://localhost:4200/alfresco/api/-default-/public/alfresco/versions/1/nodes/38b883ee-d5d4-4708-a797-3eb12BBBBbbb
Body :
{"name":"toto.pdf","properties":{"cm:title":"toto.pdf","multipleProperty":["8","1"]}}
Is it possible to pass multiple value while uploading a document ?
Thanks for your answers !
Charles REY
Solved! Go to Solution.
Seems that it works only on newer (6.2) version: https://issues.alfresco.com/jira/browse/MNT-21834
Here is the complete answer :
I understand that you're wondering why you're unable to set a multi-valued property on creating/uploading a node when using the createNode Rest API endpoint. This functionality is not supported in ACS 5.2, it is only available in ACS 6.2 onward (see here and here for information on how this can be done in 6.2).
In 5.2, you can use the updateNode call to add the multiple-values to the property of the new node like you already mentioned (https://api-explorer.alfresco.com/api-explorer/#!/nodes/updateNode).
Seems that it works only on newer (6.2) version: https://issues.alfresco.com/jira/browse/MNT-21834
Thanks, I had the confirmation from Alfresco support team. This is only supported on 6.2.
I asked for a workaround and will post it back when I get the answer.
Here is the complete answer :
I understand that you're wondering why you're unable to set a multi-valued property on creating/uploading a node when using the createNode Rest API endpoint. This functionality is not supported in ACS 5.2, it is only available in ACS 6.2 onward (see here and here for information on how this can be done in 6.2).
In 5.2, you can use the updateNode call to add the multiple-values to the property of the new node like you already mentioned (https://api-explorer.alfresco.com/api-explorer/#!/nodes/updateNode).
Hi @Soprasteria
Thanks for updating us on the workaround.
Best wishes,
Discussions, help and advice about the Alfresco Development Framework.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.