Working with AEM Forms Repository working-with-aem-forms-repository
Samples and examples in this document are only for AEM Forms on JEE environment.
About the Repository Service
The Repository service provides resource storage and management services to AEM Forms. When developers create an AEM Forms application, they can deploy the assets in the repository instead of the file system. The assets can include any type of collateral, including XML forms, PDF forms (including Acrobat forms), form fragments, images, profiles, policies, SWF files, DDX files, XML schemas, WSDL files, and test data.
For example, consider the following Forms application named Applications/FormsApplication:
Notice that there is a file named Loan.xdp in the FormsFolder. To access this form design, you specify the complete path (including version): Applications/FormsApplication/1.0/FormsFolder/Loan.xdp.
The path to a resource in the AEM Forms repository is:
Applications/Application-name/Application-version/Folder.../Filename
The following values show some examples of URI values:
- Applications/AppraisalReport/1.0/Forms/FullForm.xdp
- Applications/AnotherApp/1.1/Assets/picture.jpg
- Applications/SomeApp/2.0/Resources/Data/XSDs/MyData.xsd
https://[server name]:[server port]/repository. You can verify quick start results that are associated with the Working with AEM Forms Repository section by using a web browser. For example, if you add content to the AEM Forms Repository, you can see the content in a web browser. (See Quick Start (SOAP mode): Writing a resource using the Java API.)The repository API provides several operations that you can use to store and retrieve information from the repository. For example, you can obtain a list of resources or retrieve specific resources that are stored in the repository when a resource is needed as part of processing an application.
Using the Repository service API, you can accomplish the following tasks:
- Create folders. See Creating Folders.
- Write resources and their properties. See Writing Resources.
- List resources in a given collection or related to other resources. See Listing Resources.
- Read resources and their properties. See Reading Resources.
- Update resources and their properties. See Updating Resources.
- Search for resources, including their history, related resources, and properties. See Searching for Resources.
- Specify relationships between resources. See Creating Resource Relationships.
- Manage resource access control, including locking and unlocking resources, and reading and writing access control lists (ACLs). See Locking Resources.
- Delete resources and their properties. See Deleting Resources.
Creating Folders creating-folders
Folders (resource collections) are used to store objects (files or resources) in organized groupings. Folders can contain resources and other folders, also known as subfolders. Resources can only be stored in one folder at a time.
Files inherit access control lists (ACLs) from folders, and subfolders inherit ACLs from their parent folders. Therefore, the parent folders must exist before you can create child folders. The IDE lets you interact only on a folder-by-folder basis, not on a file-by-file basis. You cannot version folders and there is no need to do so; a folder does not contain data itself. Rather, it is only a container for resources that contain data. The default ACL is system-level permission, which means that users must have system-level permissions (read, write, traverse, managing ACLs) until someone gives them permissions for a particular folder. ACLs only work in the IDE.
Summary of steps summary-of-steps
To create a folder, follow these steps:
- Include project files.
- Create the service client.
- Create the folder.
- Write the folder to the repository.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically create a resource collection, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Create the folder
Invoke the Repository service method to create the resource collection and populate the resource collection with identifying information, including its UUID, folder name, and description.
Write the folder to the repository
Invoke the Repository service method to write the resource collection, specifying the target folder鈥檚 URI.
See also
Create folders using the Java API
Create folders using the web service API
Create folders using the Java API create-folders-using-the-java-api
Create a folder by using the Repository service API (Java):
-
Include project files
Include project files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Create the folder
To create a resource collection, you must first create a
com.adobe.repository.infomodel.bean.RepositoryInfomodelFactoryBeanobject.Invoke the
repositoryInfomodelFactoryBean辞产箩别肠迟鈥檚newResourceCollectionmethod, and pass in the following parameters:- A
com.adobe.repository.infomodel.IdUUID identifier to be assigned to the resource. - A
com.adobe.repository.infomodel.LidUUID identifier to be assigned to the resource. - A
java.lang.Stringcontaining the name of the resource collection. For example,FormsFolder.
The method returns a
com.adobe.repository.infomodel.bean.ResourceCollectionobject representing the new folder.Set the folder鈥檚 description by using the
setDescriptionmethod and pass in the following parameter:- A
Stringthat describes the resource collection. In this example,"test Folder"is used.
- A
-
Write the folder to the repository
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚writeResourcemethod and pass in the URI of the folder and theResourceCollectionobject. For example, the URI to the folder can be the following value/Applications/FormsApplication/1.0/.The method returns an instance of the newly created
com.adobe.repository.infomodel.bean.Resourceobject. You can, for example, retrieve the identifier value of the new resource by invoking thecom.adobe.repository.infomodel.bean.Resource辞产箩别肠迟鈥檚getIdmethod.
See also
Quick Start (SOAP mode): Creating a folder using the Java API
Create folders using the web service API create-folders-using-the-web-service-api
Create a folder by using the Repository service API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL using base64.
- Reference the Microsoft .NET client assembly.
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject that contains the user name and password. -
Create the folder
Create the folder by using the default constructor for the
ResourceCollectionclass and pass in the following parameters:- An
Idobject, which is created by invoking the default constructor for theIdclass and assigned to theResource辞产箩别肠迟鈥檚idfield. - An
Lidobject, which is created by invoking the default constructor for theLidclass and assigned to theResource辞产箩别肠迟鈥檚lidfield. - A string containing the name of the resource collection, which is assigned to the
Resource辞产箩别肠迟鈥檚namefield. The name used in this example is"testfolder". - A string containing the description of the resource collection, which is assigned to the
Resource辞产箩别肠迟鈥檚descriptionfield. The description used in this example is"test folder".
- An
-
Write the folder to the repository
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚writeResourcemethod and pass in the following parameters:- The path where the folder is to be created.
- The
ResourceCollectionobject representing the folder. - Pass
nullfor the other two parameters.
See also
Writing Resources writing-resources
You can create resources in a given location in the repository. The natural file size is subject to database limitations and session time-out. For the default configuration, files are limited to 25 MB. To raise or lower the maximum file size, you must change the database configuration.
Writing resources is equivalent to storing data in the repository. Once you write a resource to the repository, it becomes accessible to all clients in the repository ecosystem. When you write resources, such as XML schemas, XDP files, and XSD files, to the repository, the contents are parsed based on the MIME type. If the MIME type is supported, the parser determines whether there is an implied relationship to other content. For example, if a cascading style sheet (CSS) has a relative URL that references a common CSS, it is expected that you will submit the common CSS into the repository as well. The relationship between the two resources is stored as a pending relationship for a non-adjustable period of 30 days. When you submit the common CSS to the repository within the 30-day period, the relationship is formed.
When you create a resource, the access control list (ACL) is inherited from the parent folder. The root folder has system-level permissions until an initial resource or folder is created, at which point the resource or folder is given default ACL permissions.
You can programmatically write resources by using the Repository service Java API or web service API.
Summary of steps summary_of_steps-1
To write a resource, follow these steps:
- Include project files.
- Create a Repository service client.
- Specify the URI of the resource to be read.
- Read the resource.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Specify the URI of the target folder for the resource
Create a string containing the URI of the resource to be read. The syntax includes forward slashes, as in this example: 鈥/path/folder鈥.
Create the resource
Invoke the Repository service method to create the resource, and populate the resource with identifying information, including its UUID, resource name, and description.
Specify the resource content
Invoke the Repository service method to create resource content, and store that content in the resource.
Write the resource to the target folder
Invoke the Repository service method to write the resource, specifying the target folder鈥檚 URI.
See also
Write resources using the Java API
Write resources using the web service API
Write resources using the Java API write-resources-using-the-java-api
Write a resource by using the Repository service API (Java):
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Specify the URI of the target folder for the resource
Specify the URI of the target folder for the resource. In this case, because the resource named
testResourcewill be stored in the folder namedtestFolder, the folder鈥檚 URI is"/testFolder". The URI is stored as ajava.lang.Stringobject. -
Create the resource
To create a resource, you must first create a
com.adobe.repository.infomodel.bean.RepositoryInfomodelFactoryBeanobject.Invoke the
RepositoryInfomodelFactoryBean辞产箩别肠迟鈥檚newResourcemethod, which creates acom.adobe.repository.infomodel.bean.Resourceobject. In this example, the following parameters are provided:- A
com.adobe.repository.infomodel.Idobject, which is created by invoking the default constructor for theIdclass. - A
com.adobe.repository.infomodel.Lidobject, which is created by invoking the default constructor for theLidclass. - A
java.lang.Stringcontaining the file name of the resource.
To specify the resource鈥檚 description, invoke the
Resource辞产箩别肠迟鈥檚setDescriptionmethod and pass a string containing the description. In this example, the description is"test resource". - A
-
Specify the resource content
To create content for the resource, invoke the
RepositoryInfomodelFactoryBean辞产箩别肠迟鈥檚newResourceContentmethod, which returns acom.adobe.repository.infomodel.bean.ResourceContentobject. Add content to theResourceContentobject. In this example, this is accomplished by doing the following tasks:- Invoking the
ResourceContent辞产箩别肠迟鈥檚setDataDocumentmethod and passing in acom.adobe.idp.Documentobject - Invoking the
ResourceContent辞产箩别肠迟鈥檚setSizemethod and passing in the size in bytes of theDocumentobject
Add the content to the resource by invoking the
Resource辞产箩别肠迟鈥檚setContentmethod and passing in theResourceContentobject. For more information, see . - Invoking the
-
Write the resource to the target folder
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚writeResourcemethod and pass in the URI of the folder, and theResourceobject.
See also
Quick Start (SOAP mode): Writing a resource using the Java API
Write resources using the web service API write-resources-using-the-web-service-api
Write a resource by using the Repository service API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL using base64.
- Reference the Microsoft .NET client assembly.
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject containing the user name and password. -
Specify the URI of the target folder for the resource
Specify the URI of the target folder for the resource. In this case, because the resource named
testResourcewill be stored in the folder namedtestFolder, the folder鈥檚 URI is"/testFolder". When using a language compliant with the Microsoft .NET Framework (for example, C#), store the URI in aSystem.Stringobject. -
Create the resource
To create a resource, invoke the default constructor for the
Resourceclass. In this example, the following information is stored in theResourceobject:- A
com.adobe.repository.infomodel.Idobject, which is created by invoking the default constructor for theIdclass and assigned to theResource辞产箩别肠迟鈥檚idfield. - A
com.adobe.repository.infomodel.Lidobject, which is created by invoking the default constructor for theLidclass and assigned to theResource辞产箩别肠迟鈥檚lidfield. - A string containing the file name of the resource, which is assigned to the
Resource辞产箩别肠迟鈥檚namefield. The name used in this example is"testResource". - A string containing the description of the resource, which is assigned to the
Resource辞产箩别肠迟鈥檚descriptionfield. The description used in this example is"test resource".
- A
-
Specify the resource content
To create content for the resource, invoke the default constructor for the
ResourceContentclass. Then add content to theResourceContentobject. In this example, this is accomplished by doing the following tasks:- Assigning a
BLOBobject containing a document to theResourceContent辞产箩别肠迟鈥檚dataDocumentfield. - Assigning the size in bytes of the
BLOBobject to theResourceContent辞产箩别肠迟鈥檚sizefield.
Add the content to the resource by assigning the
ResourceContentobject to theResource辞产箩别肠迟鈥檚contentfield. - Assigning a
-
Write the resource to the target folder
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚writeResourcemethod and pass in the URI of the folder, and theResourceobject. Passnullfor the other two parameters.
See also
Listing Resources listing-resources
You can discover resources by listing resources. A query is performed against the repository to find all the resources that are related to a given resource collection.
Once you organize your resources, you can inspect the structure you created by seeing a particular branch of the structure, much like you would do in an operating system.
Listing resources operates by relationship: resources are members of folders. Membership is represented by a relationship of type 鈥渕ember of鈥. When you list resources in a given folder, you are querying for resources that are related to a given folder by the relationship 鈥渕ember of鈥. Relationships are directional: a member of a relationship has a source that is a member of the target. The source is the resource; the target is the parent folder.
Summary of steps summary_of_steps-2
To list resources, follow these steps:
- Include project files.
- Create the service client.
- Specify the folder path.
- Retrieve the list of resources.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically create a resource collection, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Specify the folder path
Create a string containing the path of the folder containing the resources. The syntax includes forward slashes, as in this example: 鈥/path/folder鈥.
Retrieve the list of resources
Invoke the Repository service method to retrieve the list of resources, specifying the target folder鈥檚 path.
See also
List resources using the Java API
List resources using the web service API
List resources using the Java API list-resources-using-the-java-api
List resources by using the Repository service API (Java):
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Specify the folder path
Specify the URI of the resource collection to be queried. In this case, its URI is
"/testFolder". The URI is stored as ajava.lang.Stringobject. -
Retrieve the list of resources
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚listMembersmethod and pass in the URI of the folder.The method returns a
java.util.Listofcom.adobe.repository.infomodel.bean.Resourceobjects that are the source of acom.adobe.repository.infomodel.bean.Relationof typeRelation.TYPE_MEMBER_OFand have the resource collection URI as the target. You can iterate through thisListto retrieve each of the resources. In this example, the name and description of each resource is displayed.
See also
Quick Start (SOAP mode): Listing resources using the Java API
List resources using the web service API list-resources-using-the-web-service-api
List resources by using the Repository service API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL.
- Reference the Microsoft .NET client assembly.
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject containing the user name and password. -
Specify the folder path
Specify a string containing the URI of the folder to be queried. In this case, its URI is
"/testFolder". When using a language that is compliant with the Microsoft .NET Framework (for example, C#), store the URI in aSystem.Stringobject. -
Retrieve the list of resources
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚listMembersmethod and pass in the URI of the folder as the first parameter. Passnullfor the other two parameters.The method returns an array of objects that can be cast to
Resourceobjects. You can iterate through the object array to retrieve each of the related resources. In this example, the name and description of each resource is displayed.
See also
Reading Resources reading-resources
You can retrieve resources from a given location in the repository to read their content and metadata. The workflow is front-ended by an initialization form. The process has all the permissions it needs to read the form. The system retrieves the data form and reads the content from the repository. The repository grants access to the content and the metadata (the ability to even know the resource exists).
The repository has the following four permission types:
- traverse: lets you list resources; that is, to read resource metadata, but not resource content
- read: lets you read resource content
- write: lets you write resource content
- managing access control lists (ACLs): lets you manipulate ACLs on resources
Users can only run processes when they have permission to run the process. IDE users need traverse and read permissions to synchronize with the repository. ACLs apply only at design time because runtime occurs within the system context.
You can programmatically read resources by using the Repository service Java API or web service API.
Summary of steps summary_of_steps-3
To read a resource, follow these steps:
- Include project files.
- Create a Repository service client.
- Specify the URI of the resource to be read.
- Read the resource.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Specify the URI of the resource to be read
Create a string containing the URI of the resource to be read. The syntax includes forward slashes, as in this example: 鈥/path/resource鈥.
Read the resource
Invoke the Repository service method to read the resource, specifying the URI.
See also
Read resources using the Java API
Reading resources using the web service API
Read resources using the Java API read-resources-using-the-java-api
Read a resource by using the Repository service API (Java):
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Specify the URI of the resource to be read
Specify a string value that represents the URI of the resource to retrieve. For example, assuming the resource is named testResource which is in a folder named testFolder, specify
/testFolder/testResource. -
Read the resource
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚readResourcemethod and pass the URI of the resource as a parameter. This method returns aResourceinstance that represents the resource.
See also
Quick Start (SOAP mode): Reading a resource using the Java API
Including AEM Forms Java library files
Reading resources using the web service API reading-resources-using-the-web-service-api
Read a resource by using the Repository service API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL. (See Creating a .NET client assembly that uses Base64 encoding.)
- Reference the Microsoft .NET client assembly. (See Creating a .NET client assembly that uses Base64 encoding.)
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject containing the user name and password. -
Specify the URI of the resource to be read
Specify a string containing the URI of the resource to be retrieved. In this case, because the resource named
testResourceis in the folder namedtestFolder, its URI is"/testFolder/testResource". When using a language compliant with the Microsoft .NET Framework (for example, C#), store the URI in aSystem.Stringobject. -
Read the resource
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚readResourcemethod and pass the URI of the resource as the first parameter. Passnullfor the other two parameters.
See also
Updating Resources updating-resources
You can retrieve and update the content of resources in the repository. When you update resources, access control to those resources remains unchanged between versions. When performing an update, you have the option of incrementing the major version. If you do not choose to increment the major version, the minor version is automatically updated.
When you update a resource, the new version is created based on the specified resource attributes. When you update a resource you specify two important parameters: the target URI and a resource instance containing all the updated metadata. It is important to note that if you are not changing a given attribute (for example, the name), the attribute is still required in the instance you pass in. The relationships that are created when parsing the content are added to the specific version and are not brought forward unless specified.
For example, if you update an XDP file and it contains references to other resources, those additional references will also be recorded. Suppose that form.xdp version 1.0 has two external references: a logo and a style sheet, and you subsequently update form.xdp so that it now has three references: a logo, a style sheet, and a schema file. During the update, the repository will add the third relationship (to the schema file) to its pending relation table. Once the schema file is present in the repository, the relationship will automatically be formed. However, if form.xdp version 2.0 no longer uses the logo, form.xdp version 2.0 will not have a relationship to the logo.
All update operations are atomic and transactional. For example, if two users read the same resource and both decide to update version 1.0 to version 2.0, one of them will succeed and one of them will fail, the integrity of the repository will be maintained, and both will get a message confirming success or failure. If the transaction does not commit, it will roll back if there is a database failure and will time out or roll back depending on the application server.
You can programmatically update resources by using the Repository service Java API or web service API.
Summary of steps summary_of_steps-4
To update a resource, follow these steps:
- Include project files.
- Create a Repository service client.
- Retrieve the resource to be updated.
- Update the resource.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Retrieve the resource to be updated
Read the resource. For more information, see Reading Resources.
Update the resource
Set the new information in the resource and invoke the Repository service method to update the resource, specifying the URI, the updated resource, and how the version information should be updated.
See also
Update resources using the Java API
Update resources using the web service API
Including AEM Forms Java library files
Repository Service API Quick Starts
Update resources using the Java API update-resources-using-the-java-api
Update a resource by using the Repository service API (Java):
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Retrieve the resource to be updated
Specify the URI of the resource to retrieve and read the resource. In this example, the URI of the resource is
"/testFolder/testResource". -
Update the resource
Update the
Resource辞产箩别肠迟鈥檚 information. In this example, to update the description, invoke theResource辞产箩别肠迟鈥檚setDescriptionmethod and pass the new description string as a parameter.Then invoke the
ServiceClientFactory辞产箩别肠迟鈥檚updateResourcemethod, and pass in the following parameters:- A
java.lang.Stringobject containing the resource鈥檚 URI. - The
Resourceobject containing the updated resource information. - A
booleanvalue indicating whether to update the major or minor version. In this example, a value oftrueis passed in to indicate that the major version is to be incremented.
- A
See also
Quick Start (SOAP mode): Updating a resource using the Java API
Update resources using the web service API update-resources-using-the-web-service-api
Update a resource by using the Repository API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL.
- Reference the Microsoft .NET client assembly.
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject containing the user name and password. -
Retrieve the resource to be updated
Specify the URI of the resource to be retrieved and read the resource. In this example, the URI of the resource is
"/testFolder/testResource". For more information, see Reading Resources. -
Update the resource
Update the
Resource辞产箩别肠迟鈥檚 information. In this example, to update the description, assign a new value to theResource辞产箩别肠迟鈥檚descriptionfield. -
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚updateResourcemethod, and pass in the following parameters:- A
System.Stringobject containing the resource鈥檚 URI. - The
Resourceobject containing the updated resource information. - A
booleanvalue indicating whether to update the major or minor version. In this example, a value oftrueis passed in to indicate that the major version is to be incremented. - Pass
nullfor the remaining two parameters.
- A
See also
Searching for Resources searching-for-resources
You can construct queries used to search for resources in the repository, including history, related resources, and properties.
You can retrieve related resources to determine dependencies between a form and its fragments. For example, if you have a form you can determine what fragments or external resources it uses. If you have an image, you can also find out what forms use the image. You can also search for related resources using filtering based on properties. For example, you can search for all forms that use an image with a specified name, or find any image used by a form with a specified name. You can also search using resource properties. For example, you can conduct a query to find all forms or resources whose name starts with a given string that may include 鈥%鈥 and 鈥檁鈥 wildcards. Remember that searches based on properties are not based on relationships; such searches are based on the assumption that you have specific knowledge about a given resource.
Query statements
A query contains one or more statements that are logically joined with conditions. A statement consists of a left operand, an operator, and a right operand. In addition, you can specify the sort order to be used for the search results. The sort order contains information equivalent to an SQL ORDER BY clause and is comprised of elements that contain the attributes on which the search was based and a value indicating whether ascending or descending order is to be used.
You can programmatically search for resources by using the Repository service Java API. At this time, it is not possible to use the web service API to search for resources.
Sort behaviour
Sort order is not respected when invoking the ResourceRepositoryClient 辞产箩别肠迟鈥檚 searchProperties method and specifying a sort order. For example, assume that you create a resource with three custom properties, where attribute names are name, secondName, and asecondName. Next you create a sort order element on the attribute name and set the ascending value to true.
Then you invoke the ResourceRepositoryClient 辞产箩别肠迟鈥檚 searchProperties method and pass in the sort order. The search returns the right resource, with the three properties. However, the properties are not sorted by attribute name. They are returned in the order they were added: name, secondName, and asecondName.
Summary of steps summary_of_steps-5
To search for resources, follow these steps:
- Include project files.
- Create a Repository service client.
- Specify the target folder for the search.
- Specify the attributes used in the search.
- Create the query used in the search.
- Create the sort order for the search results.
- Search for the resources.
- Retrieve the resources from the search result.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Specify the target folder for the search
Create a string containing the base path from which to conduct the search. The syntax includes forward slashes, as in this example: 鈥/path/folder鈥.
Specify the attributes used in the search
You can base your search on the attributes contained within resources. Specify the values of the attributes on which to conduct the search.
Create the query used in the search
Construct a query by using statements and conditions. Each statement will specify the attribute on which to base the search, the condition to be used, and the attribute value to be used in the search.
Create the sort order for the search results
The sort order is comprised of elements, each of which contains one of the attributes used in the search and a value indicating whether ascending or descending order is to be used.
Search for the resources
Search for the resources using the folder, query, and sort order. In addition, indicate the depth of the search and an upper limit on the number of results to be returned.
Retrieve the resources from the search result
Iterate through the returned list of resources and extract the information for further processing.
See also
Search for resources using the Java API
Search for resources using the Java API search-for-resources-using-the-java-api
Search for a resource by using the Repository service API (Java):
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Specify the target folder for the search
Specify the URI of the base path from which to execute the search. In this example, the URI of the resource is
/testFolder. -
Specify the attributes used in the search
Specify the values for the attributes on which to conduct the search. The attributes exist within a
com.adobe.repository.infomodel.bean.Resourceobject. In this example, the search will be conducted on the name attribute; therefore, ajava.lang.Stringcontaining theResource辞产箩别肠迟鈥檚 name is used, which istestResourcein this case. -
Create the query used in the search
To create a query, create a
com.adobe.repository.query.Queryobject by invoking the default constructor for theQueryclass and add statements to the query.To create a statement, invoke the constructor for the
com.adobe.repository.query.Query.Statementclass and pass in the following parameters:- A left operand containing the resource attribute constant. In this example, because the resource鈥檚 name is used as the basis for the search, the static value
Resource.ATTRIBUTE_NAMEis used. - An operator containing the condition used in the search for the attribute. The operator must be one of the static constants in the
Query.Statementclass. In this example, the static valueQuery.Statement.OPERATOR_BEGINS_WITHis used. - A right operand containing the attribute value on which to conduct the search. In this example, the name attribute, a
Stringcontaining the value"testResource", is used.
Specify the namespace of the left operand by invoking the
Query.Statement辞产箩别肠迟鈥檚setNamespacemethod and passing in one of the static values contained in thecom.adobe.repository.infomodel.bean.ResourcePropertyclass. In this example,ResourceProperty.RESERVED_NAMESPACE_REPOSITORYis used.Add each statement to the query by invoking the
Query辞产箩别肠迟鈥檚addStatementmethod and passing in theQuery.Statementobject. - A left operand containing the resource attribute constant. In this example, because the resource鈥檚 name is used as the basis for the search, the static value
-
Create the sort order for the search results
To specify the sort order used in the search results, create a
com.adobe.repository.query.sort.SortOrderobject by invoking the default constructor for theSortOrderclass, and add elements to the sort order.To create an element for the sort order, invoke one of the constructors for the
com.adobe.repository.query.sort.SortOrder.Elementclass. In this example, because the resource鈥檚 name is used as the basis for the search, the static valueResource.ATTRIBUTE_NAMEis used as the first parameter, and ascending order (abooleanvalue oftrue) is specified as the second parameter.Add each element to the sort order by invoking the
SortOrder辞产箩别肠迟鈥檚addSortElementmethod and passing in theSortOrder.Elementobject. -
Search for the resources
To search for
resourcesbased on attribute properties, invoke theResourceRepositoryClient辞产箩别肠迟鈥檚searchPropertiesmethod and pass in the following parameters:- A
Stringcontaining the base path from which to execute the search. In this case,"/testFolder"is used. - The query used in the search.
- The depth of the search. In this case,
com.adobe.repository.infomodel.bean.ResourceCollection.DEPTH_INFINITEis used to indicate that the base path and all its folders are to be used. - An
intvalue indicating the first row from which to select the unpaged result set. In this example,0is specified. - An
intvalue indicating the maximum number of results to be returned. In this example,10is specified. - The sort order used in the search.
The method returns a
java.util.ListofResourceobjects in the specified sort order. - A
-
Retrieve the resources from the search result
To retrieve the resources contained in the search result, iterate through the
Listand cast each object to aResourceto extract its information. In this example, the name of each resource is displayed.
See also
Quick Start (SOAP mode): Searching for resources using the Java API
Creating Resource Relationships creating-resource-relationships
You can specify relationships between resources in the repository. There are three kinds of relationships:
- Dependence: a relationship in which a resource depends on other resources, meaning that all related resources are needed in the repository.
- Membership (file system): a relationship in which a resource is located within a given folder.
- Custom: a relationship you specify between resources. For example, if one resource has been deprecated and another resource introduced into the repository, you could specify your own replacement relationship.
You can create your own custom relationships. For example, if you store an HTML file in the repository and it uses an image, you could specify a custom relationship to relate the HTML file with the image (since normally only XML files are associated with images using a repository-defined dependence relationship). Another example of a custom relationship would be if you wanted to build a different view of the repository with a cyclical graph structure instead of a tree structure. You could define a circular graph along with a viewer to traverse those relationships. Finally, you could indicate that a resource replaces another resource even though the two resources are completely different. In that case you could define a relationship type outside of the reserved range and create a relationship between those two resources. Your application would be the only client that could detect and process the relationship, and it could be used to conduct searches on that relationship.
You can programmatically specify relationships between resources by using the Repository service Java API or web service API.
Summary of steps summary_of_steps-6
To specify a relationship between two resources, follow these steps:
- Include project files.
- Create a Repository service client.
- Specify the URIs of the resources to be related.
- Create the relationship.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Specify the URIs of the resources to be related
Create strings containing the URIs of the resource to be related. The syntax includes forward slashes, as in this example: 鈥/path/resource鈥.
Create the relationship
Invoke the Repository service method to create and specify the type of relationship.
See also
Create relationship resources using the Java API
Create relationship resources using the web service API
Including AEM Forms Java library files
Repository Service API Quick Starts
Create relationship resources using the Java API create-relationship-resources-using-the-java-api
Create relationship resources by using the Repository service Java API, perform the following tasks:
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Specify the URIs of the resources to be related
Specify the URIs of the resources to be related. In this case, because the resources are named
testResource1andtestResource2and are in the folder namedtestFolder, their URIs are"/testFolder/testResource1"and"/testFolder/testResource2". The URIs are stored as ajava.lang.Stringobjects. In this example, the resources are first written to the repository, and their URIs are retrieved. For more information about writing a resource, see Writing Resources. -
Create the relationship
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚createRelationshipmethod and pass in the following parameters:- The URI of the source resource.
- The URI of the target resource.
- The type of relationship, which is one of the static constants in the
com.adobe.repository.infomodel.bean.Relationclass. In this example, a dependence relationship is established by specifying the valueRelation.TYPE_DEPENDANT_OF. - A
booleanvalue indicating whether the target resource is automatically updated to thecom.adobe.repository.infomodel.Id-based identifier of the new head resource. In this example, because of the dependence relationship, the valuetrueis specified.
You can also retrieve a list of related resources for a given resource by invoking the
ResourceRepositoryClient辞产箩别肠迟鈥檚getRelatedmethod and passing in the following parameters:- The URI of the resource for which to retrieve related resources. In this example, the source resource (
"/testFolder/testResource1") is specified. - A
booleanvalue indicating whether the specified resource is the source resource in the relationship. In this example, the valuetrueis specified because this is the case. - The relationship type, which is one of the static constants in the
Relationclass. In this example, a dependence relationship is specified by using the same value used earlier:Relation.TYPE_DEPENDANT_OF.
The
getRelatedmethod returns ajava.util.ListofResourceobjects through which you can iterate to retrieve each of the related resources, casting the objects contained in theListtoResourceas you do so. In this example,testResource2is expected to be in the list of returned resources.
See also
Creating Resource Relationships
Quick Start (SOAP mode): Creating relationships between resources using the Java API
Create relationship resources using the web service API create-relationship-resources-using-the-web-service-api
Create relationship resources by using the Repository API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL.
- Reference the Microsoft .NET client assembly.
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject containing the user name and password. -
Specify the URIs of the resources to be related
Specify the URIs of the resources to be related. In this case, because the resources are named
testResource1andtestResource2and are in the folder namedtestFolder, their URIs are"/testFolder/testResource1"and"/testFolder/testResource2". When using a language compliant with the Microsoft .NET Framework (for example, C#), the URIs are stored as aSystem.Stringobjects. In this example, the resources are first written to the repository, and their URIs are retrieved. For more information about writing a resource, see Writing Resources. -
Create the relationship
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚createRelationshipmethod and pass in the following parameters:- The URI of the source resource.
- The URI of the target resource.
- The type of relationship. In this example, a dependence relationship is established by specifying the value
3. - A
booleanvalue indicating whether the relationship type was specified. In this example, the valuetrueis specified. - A
booleanvalue indicating whether the target resource is automatically updated to theId-based identifier of the new head resource. In this example, because of the dependence relationship, the valuetrueis specified. - A
booleanvalue indicating whether the target head was specified. In this example, the valuetrueis specified. - Pass
nullfor the last parameter.
You can also retrieve a list of related resources for a given resource by invoking the
RepositoryServiceService辞产箩别肠迟鈥檚getRelatedmethod and passing in the following parameters:- The URI of the resource for which to retrieve related resources. In this example, the source resource (
"/testFolder/testResource1") is specified. - A
booleanvalue indicating whether the specified resource is the source resource in the relationship. In this example, the valuetrueis specified because this is the case. - A
booleanvalue indicating whether the source resource was specified. In this example, the valuetrueis provided. - An array of integers containing the relationship types. In this example, a dependence relationship is specified by using the same value in the array as was used earlier:
3. - Pass
nullfor the remaining two parameters.
The
getRelatedmethod returns an array of objects that can be cast toResourceobjects through which you can iterate to retrieve each of the related resources. In this example,testResource2is expected to be in the list of returned resources.
See also
Locking Resources locking-resources
You can lock a resource or set of resources for exclusive use by a particular user or shared use among more than one user. A shared lock is an indication that something will happen with the resource, but it does not prevent anyone else from taking actions with that resource. A shared lock should be considered a signaling mechanism. An exclusive lock means that the user who locked the resource is going to change the resource, and the lock ensures that nobody else can do so until the user no longer needs access to the resource and has released the lock. If a repository administrator unlocks a resource, all exclusive and shared locks on that resource will automatically be removed. This type of action is meant for situations in which a user is no longer available and has not unlocked the resource.
When a resource is locked, a lock icon appears when you view the Resources tab in Workbench, as shown in the following illustration.
You can programmatically control access to resources by using the Repository service Java API or web service API.
Summary of steps summary_of_steps-7
To lock and unlock resources, follow these steps:
- Include project files.
- Create a Repository service client.
- Specify the URI of the resource to be locked.
- Lock the resource.
- Retrieve the locks for the resource.
- Unlock the resource
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Specify the URI of the resource to be locked
Create a string containing the URI of the resource to be locked. The syntax includes forward slashes, as in this example: 鈥/path/resource鈥.
Lock the resource
Invoke the Repository service method to lock the resource, specifying the URI, the type of lock, and the locking depth.
Retrieve the locks for the resource
Invoke the Repository service method to retrieve the locks for the resource, specifying the URI.
Unlock the resource
Invoke the Repository service method to unlock the resource, specifying the URI.
See also
Lock resources using the Java API
Lock resources using the web service API
Lock resources using the Java API lock-resources-using-the-java-api
Lock resources by using the Repository service API (Java):
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Specify the URI of the resource to be locked
Specify the URI of the resource to be locked. In this case, because the resource named
testResourceis in the folder namedtestFolder, its URI is"/testFolder/testResource". The URI is stored as ajava.lang.Stringobject. -
Lock the resource
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚lockResourcemethod and pass in the following parameters:- The URI of the resource.
- The lock scope. In this example, because the resource will be locked for exclusive use, the lock scope is specified as
com.adobe.repository.infomodel.bean.Lock.SCOPE_EXCLUSIVE. - The lock depth. In this example, because the locking will apply only to the particular resource and none of its members or children, the lock depth is specified as
Lock.DEPTH_ZERO.
note note NOTE The overloaded version of the lockResourcemethod that requires four parameters throws an exception. Ensure to use thelockResourcemethod that requires three parameters as shown in this walkthrough. -
Retrieve the locks for the resource
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚getLocksmethod and pass the URI of the resource as a parameter. The method returns a List of Lock objects through which you can iterate. In this example, the lock owner, depth, and scope are printed for each object by invoking each Lock 辞产箩别肠迟鈥檚getOwnerUserId,getDepth, andgetTypemethods, respectively. -
Unlock the resource
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚unlockResourcemethod and pass the URI of the resource as a parameter. For more information, see the .
See also
Quick Start (SOAP mode): Locking a resource using the Java API
Lock resources using the web service API lock-resources-using-the-web-service-api
Lock resources by using the Repository service API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL using Base64.
- Reference the Microsoft .NET client assembly.
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject containing the user name and password. -
Specify the URI of the resource to be locked
Specify a string containing the URI of the resource to be locked. In this case, because the resource named
testResourceis in the foldertestFolder, its URI is"/testFolder/testResource". When using a language compliant with the Microsoft .NET Framework (for example, C#), store the URI in aSystem.Stringobject. -
Lock the resource
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚lockResourcemethod and pass in the following parameters:- The URI of the resource.
- The lock scope. In this example, because the resource will be locked for exclusive use, the lock scope is specified as
11. - The lock depth. In this example, because the locking will apply only to the particular resource and none of its members or children, the lock depth is specified as
2. - An
intvalue indicating the number of seconds until the lock expires. In this example, the value of1000is used. - Pass
nullfor the last parameter.
-
Retrieve the locks for the resource
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚getLocksmethod and pass the URI of the resource as the first parameter andnullfor the second parameter. The method returns anobjectarray containingLockobjects through which you can iterate. In this example, the lock owner, depth, and scope are printed for each object by accessing eachLock辞产箩别肠迟鈥檚ownerUserId,depth, andtypefields, respectively. -
Unlock the resource
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚unlockResourcemethod and pass the URI of the resource as the first parameter andnullfor the second parameter.
See also
Deleting Resources deleting-resources
You can programmatically delete resources from a given location in the repository by using the Repository service Java API(SOAP).
When you delete a resource, the deletion is normally permanent, though in some cases ECM repositories may store the versions of the resource according to their history mechanisms. Therefore, when deleting a resource, it is important to be sure that you will never need that resource again. The common reasons for deleting a resource include the need to increase the available space in the database. You can delete a version of a resource, but if you do so you must specify the resource identifier, and not its logical identifier (LID) or path. If you delete a folder, everything in that folder, including subfolders and resources, will be automatically deleted.
Related resources are not deleted. For example, if you have a form that uses the logo.gif file, and you delete logo.gif, a relationship will be stored in the pending relationship table. As an alternative, for version deprecation, set the object status of the latest version to deprecated.
A deletion operation is not transaction-safe in ECM systems. For example, if you attempt to delete 100 resources and the operation fails on the 50th resource, the first 49 instances will be deleted but the rest will not be. Otherwise, the default behavior is rollback (non-commitment).
com.adobe.repository.bindings.dsc.client.ResourceRepositoryClient.deleteResources() method with ECM repository (EMC Documentum Content Server and IBM FileNet P8 Content Manager), the transaction will not be rolled back if the deletion fails for one of the specified resources, which means that those files that have been deleted cannot be undeleted.Summary of steps summary_of_steps-8
To delete a resource, follow these steps:
- Include project files.
- Create a Repository service client.
- Specify the URI of the resource to be deleted.
- Delete the resource.
Include project files
Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.
Create the service client
Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.
Specify the URI of the resource to be deleted
Create a string containing the URI of the resource to be deleted. The syntax includes forward slashes, as in this example: 鈥/path/resource鈥. If the resource to be deleted is a folder, the deletion will be recursive.
Delete the resource
Invoke the Repository service method to delete the resource, specifying the URI.
See also
Delete resources using the Java API
Delete resources using the web service API
Including AEM Forms Java library files
Repository Service API Quick Starts
Delete resources using the Java API(SOAP) delete-resources-using-the-java-api-soap
Delete a resource by using the Repository API (Java):
-
Include project files
Include client JAR files in your Java project鈥檚 class path.
-
Create the service client
Create a
ResourceRepositoryClientobject by using its constructor and passing aServiceClientFactoryobject that contains connection properties. -
Specify the URI of the resource to be deleted
Specify the URI of the resource to be retrieved. In this case, because the resource named testResourceToBeDeleted is in the folder named testFolder, its URI is
/testFolder/testResourceToBeDeleted. The URI is stored as ajava.lang.Stringobject. In this example, the resource is first written to the repository, and its URI is retrieved. For more information about writing a resource, see Writing Resources. -
Delete the resource
Invoke the
ResourceRepositoryClient辞产箩别肠迟鈥檚deleteResourcemethod and pass the URI of the resource as a parameter.
See also
Quick Start (SOAP mode): Searching for resources using the Java API
Delete resources using the web service API delete-resources-using-the-web-service-api
Delete a resource by using the Repository API (web service):
-
Include project files
- Create a Microsoft .NET client assembly that consumes the Repository WSDL using Base64.
- Reference the Microsoft .NET client assembly.
-
Create the service client
Using the Microsoft .NET client assembly, create a
RepositoryServiceServiceobject by invoking its default constructor. Set itsCredentialsproperty using aSystem.Net.NetworkCredentialobject containing the user name and password. -
Specify the URI of the resource to be deleted
Specify the URI of the resource to be retrieved. In this case, because the resource named
testResourceToBeDeletedis in the folder namedtestFolder, its URI is"/testFolder/testResourceToBeDeleted". In this example, the resource is first written to the repository, and its URI is retrieved. For more information about writing a resource, see Writing Resources. -
Delete the resource
Invoke the
RepositoryServiceService辞产箩别肠迟鈥檚deleteResourcesmethod and pass aSystem.Stringarray containing the URI of the resource as the first parameter. Passnullfor the second parameter.
See also
Invoking AEM Forms using Base64 encoding