Copying a Record from Client-Side Code Using the Model Class in a Creatio Freedom UI Page

Creatio includes the ability to copy records. When copying, only the properties that are marked as “clonable” are copied to the new record and the properties that are not marked for copy are not included. Creaio’s new Model class includes this same capability to copy records. To copy a record we’ll use the Model class that is a part of the Creatio DevKit SDK.

To use the devkit, you’ll need to add “@creatio-devkit/common” to the modules list of your page. This will look like this (note the “@creatio-devkit/common” in the square brackets and the sdk without quotes in the parenthesis):

define("UsrMyCustomEntity_FormPage", /**SCHEMA_DEPS*/["@creatio-devkit/common"] /**SCHEMA_DEPS*/, 
function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
	return {
		// ... the rest of the page here
	};
});

Now, with that module available, you can access things in the SDK, such as the Model class. We’ll use this model class to create a model for a specific entity. Then, we’ll pass the Id of the record we want to copy and we’ll be provided with a payload.  The payload it gives back to us will be the original record in copy mode. This means that only the clonable properties will be loaded. We can modify that payload further if we want, and then use the Model class insert function to save the new copied record. The overall flow will be as follows:

  1. Create the model
  2. Call the copy function and pass the Id of the record to copy which returns a payload for a copied record of the original
  3. Modify the payload, if necessary
  4. Call the insert function and provide the payload we got back from the copy

Let’s take a look at the code:

const accountModel = await sdk.Model.create("Account");

// get a copied payload of the record we're copying
const copiedAccount = await accountModel.copy(someAccountIdToCopy);

// modify payload if necessary
copiedAccount.Name = "New name of account";

// insert the copied record
accountModel.insert(copiedAccount);

One thing to make clear here. If you don’t insert the copied record, there’s nothing saved to the database at all. Calling copy simply provides you with a payload. It’s like you just loaded the record, but only loaded the clonable properties. Additionally, the Id of the record, in the payload, will have a new Guid value for the new record. However, nothing is saved in the database until you’ve passed this payload to insert.

Want content like this delivered to your inbox? Sign up for our newsletter!
ABOUT THE AUTHOR

Ryan Farley

Ryan Farley is the Director of Development for Customer FX and creator of slxdeveloper.com. He's been blogging regularly about SalesLogix, now Infor CRM, since 2001 and believes in sharing with the community. His new passion for CRM is Creatio, formerly bpm'online. He loves C#, Javascript, web development, open source, and Linux. He also loves his hobby as an amateur filmmaker.

Submit a Comment

Your email address will not be published. Required fields are marked *