Examples of package install scripts
Level: intermediate
Install scripts let you execute CRUD operations with data using Entity
and EntitySchemaQuery
classes. Learn more about the Entity
class: .NET classes reference. Learn more about the EntitySchemaQuery
class: .NET classes reference.
Retrieve data
Retrieve a contact that has specified data
Example
Retrieve a contact record that has the "SomeContactName" name.
Example that retrieves a contact record by name
public static Entity GetContact(UserConnection userConnection, string name) {
EntitySchemaManager entitySchemaManager = userConnection.EntitySchemaManager;
Entity contact = entitySchemaManager.GetEntityByName("Contact", userConnection);
var contactConditions = new Dictionary<string, object> {
{ "SomeContactName", name }
};
return !contact.FetchFromDB(contactConditions) ? null : contact;
}
Retrieve data using pagination
Example
Fill out the type of delivery. Retrieve data using pagination.
Example that retrieves data using pagination
namespace Terrasoft.Configuration {
using System;
using System.Collections.Generic;
using Terrasoft.Core;
using Terrasoft.Core.Entities;
public class FillDeliveryType: IInstallScriptExecutor {
public void Execute(UserConnection userConnection) {
/* Create an ESQ that contains the [Id] column of the product and [Name] column from the [OrderProduct] database table. */
EntitySchemaQuery esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "OrderProduct");
EntitySchemaQueryColumn orderIdColumn = esqResult.AddColumn("Order.Id");
EntitySchemaQueryColumn productCategoryColumn = esqResult.AddColumn("Product.Category.Name");
/* Implement pagination. */
var options = new EntitySchemaQueryOptions {
PageableDirection = Core.DB.PageableSelectDirection.First,
RowsOffset = 0,
PageableRowCount = userConnection.AppConnection.MaxEntityRowCount,
PageableConditionValues = new Dictionary <string, object> ()
};
/* Retrieve the collection of the orders. */
EntityCollection productsInOrder = esqResult.GetEntityCollection(userConnection, options);
EntitySchemaManager entitySchemaManager = userConnection.EntitySchemaManager;
Entity orderEntity = entitySchemaManager.GetEntityByName("Order", userConnection);
/* The first page. */
EditOrders(productsInOrder, orderIdColumn, productCategoryColumn, orderEntity);
int rowsRead = productsInOrder.Count;
/* Use the pagination. */
while (productsInOrder.Count > 0) {
options.RowsOffset = rowsRead;
/* Scroll forward. */
options.PageableDirection = Core.DB.PageableSelectDirection.Next;
/* Retrieve next page. */
esqResult.ResetSelectQuery();
productsInOrder = esqResult.GetEntityCollection(userConnection, options);
rowsRead += productsInOrder.Count;
EditOrders(productsInOrder, orderIdColumn, productCategoryColumn, orderEntity);
}
}
private void EditOrders(EntityCollection productsInOrder, EntitySchemaQueryColumn orderIdColumn,
EntitySchemaQueryColumn productCategoryColumn, Entity orderEntity) {
/* Implement the modifying logic. */
}
}
}
To work with big data, follow the Recommendations for working with big data.
Add data
Add a contact that has specified data
Example
Add a contact that has the specified name and account.
Example that adds a contact that has the specified name and account
public static void CreateContact(UserConnection userConnection, string contactName, string accountName) {
if (GetContact(userConnection, contactName) != null) {
return;
}
EntitySchemaManager entitySchemaManager = userConnection.EntitySchemaManager;
Entity contact = entitySchemaManager.GetEntityByName("Contact", userConnection);
contact.SetDefColumnValues();
contact.SetColumnValue("Id", Guid.NewGuid());
/* The AccountHelper class is a helper class. */
contact.SetColumnValue("AccountId", AccountHelper.GetAccountId(userConnection, accountName));
contact.SetColumnValue("Name", contactName);
contact.Save();
}
Add a new job title that supports different cultures
Example
Add a new job title that supports Spanish and English cultures.
Example that adds a new job title that supports different cultures
namespace Terrasoft.Configuration {
using System;
using System.Globalization;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.Entities;
public class CreateJobTitle: IInstallScriptExecutor {
public void Execute(UserConnection userConnection) {
EntitySchemaManager entitySchemaManager = userConnection.EntitySchemaManager;
Entity job = entitySchemaManager.GetEntityByName("Job", userConnection);
job.SetDefColumnValues();
job.SetColumnValue("Id", Guid.NewGuid());
var jobName = new LocalizableString();
var esCulture = new CultureInfo("es-ES");
var enCulture = new CultureInfo("en-US");
jobName.SetCultureValue(esCulture, "Mentor");
jobName.SetCultureValue(enCulture, "Master");
job.SetColumnValue("Name", jobName);
job.Save();
}
}
}
Modify data
Example
Modify a contact field.
Example that modifies a contact field
public static void SetContactField(UserConnection userConnection, string contactName, string columnValue) {
/* The ContactHelper class is a helper class. */
var entity = ContactHelper.GetContact(userConnection, contactName);
/* The LanguageHelper class is a helper class. */
entity.SetColumnValue("ProgrammingLanguageId", LanguageHelper.GetLanguageId(userConnection, columnValue));
entity.Save();
}
Delete data
Example
Delete a contact record.
Example that deletes a contact record
public static void DeleteContact(UserConnection userConnection, string contactName) {
/* The ContactHelper class is a helper class. */
var contact = ContactHelper.GetContact(userConnection, contactName);
contact.Delete();
}