/// <summary> /// Processes the item set changes for custom relationship. /// </summary> /// <param name="itemSetConfig">The item set.</param> /// <param name="selectedIds">The selected ids.</param> /// private void ProcessItemSetChangesForCustomRelationship(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig, string selectedIds) { var relationshipName = itemSetConfig.pavelkh_RelationshipName; var selectedIdList = ParseIdList(selectedIds); var inputTarget = this.PluginContext.InputTargetAsEntity; var entity1LogicalName = inputTarget.LogicalName; var entity2LogicalName = itemSetConfig.pavelkh_EntityName == entity1LogicalName ? itemSetConfig.pavelkh_ItemSetEntityName : itemSetConfig.pavelkh_EntityName; var fetchXmlQuery = itemSetConfig.pavelkh_FetchXmlForIntersect.Replace( ItemSetBuilder.FetchXmlEntityIdPlaceHolder, inputTarget.Id.ToString("D")); var fetchExpression = new FetchExpression(fetchXmlQuery); var service = this.PluginContext.Service; var entityCollection = service.RetrieveMultiple(fetchExpression); var existingSelected = entityCollection.Entities.Select(r => r.Id).ToList(); var itemsToAssociate = selectedIdList .Except(existingSelected) .Select(r => new EntityReference(entity2LogicalName, r)) .ToList(); this.Associate(relationshipName, itemsToAssociate); var itemsToDisassociate = existingSelected .Except(selectedIdList) .Select(r => new EntityReference(entity2LogicalName, r)) .ToList(); this.Disassociate(relationshipName, itemsToDisassociate); }
/// <summary> /// The process check box set changes. /// </summary> /// <param name="itemSetConfig">The check box set.</param> private void ProcessItemSetChanges(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig) { var pluginContext = this.PluginContext; var fakeFieldName = itemSetConfig.pavelkh_DummySavingField; var sharedVariableKey = SharedVariableKeyPrefix + fakeFieldName; var value = pluginContext.GetSharedVariable(sharedVariableKey, true); var ids = value?.ToString(); if (string.IsNullOrWhiteSpace(ids)) { return; } var customHandlerSpecified = !string.IsNullOrWhiteSpace(itemSetConfig.pavelkh_SaveChangesHandler); var isCustomRelationship = itemSetConfig.pavelkh_IsCustomRelationship ?? false; if (isCustomRelationship || !customHandlerSpecified) { this.ProcessItemSetChangesForCustomRelationship(itemSetConfig, ids); } else { this.ProcessItemSetChangesByCustomHandler(itemSetConfig, ids); } }
/// <summary> /// Processes the item set changes for out-of-box relationship by custom handler. /// </summary> /// <param name="itemSetConfig">The item set.</param> /// <param name="selectedIds">The selected ids.</param> /// private void ProcessItemSetChangesByCustomHandler(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig, string selectedIds) { var handlerActionName = itemSetConfig.pavelkh_SaveChangesHandler; var request = new OrganizationRequest(handlerActionName) { [CustomSaveHandlerItemSetParamName] = itemSetConfig.pavelkh_ItemSetName, [CustomSaveHandlerEntityRefParamName] = this.PluginContext.PrimaryEntityRef, [CustomSaveHandlerSelectedIdListParamName] = selectedIds }; var service = this.PluginContext.Service; service.Execute(request); }
/// <summary> /// The save fake field value. /// </summary> /// <param name="itemSetConfig"> /// The item. /// </param> private void SaveFakeFieldValue(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig) { var target = this.PluginContext.InputTargetAsEntity; var fakeFieldName = itemSetConfig.pavelkh_DummySavingField; if (string.IsNullOrWhiteSpace(fakeFieldName)) { throw new InvalidPluginExecutionException($"There is an error in configuration for '{ itemSetConfig.pavelkh_ItemSetName }' entity set. The dummy field is not specifed"); } if (!target.Contains(fakeFieldName)) { return; } var ids = target.GetAttributeValue <string>(fakeFieldName); var sharedVariableKey = SharedVariableKeyPrefix + fakeFieldName; this.PluginContext.SetSharedVariable(sharedVariableKey, ids); target[fakeFieldName] = null; }
public void PublishAfterRenaming() { var pluginContext = this.PluginContext; pluginContext.Trace("Publishing after Item Set Configuration renaming..."); var itemSetConfigurationId = this.PluginContext.PrimaryEntityId; var ctx = pluginContext.OrgCtx; var entityName = ctx.pavelkh_advancedmultiselectitemsetconfigurationSet.Where( r => r.pavelkh_advancedmultiselectitemsetconfigurationId == itemSetConfigurationId) .Select(r => r.pavelkh_EntityName) .FirstOrDefault(); var service = pluginContext.Service; MetadataUtils.PublishEntity(service, entityName); var configUpdate = new pavelkh_advancedmultiselectitemsetconfiguration() { pavelkh_advancedmultiselectitemsetconfigurationId = itemSetConfigurationId, pavelkh_PublishRequired = false }; service.Update(configUpdate); }
private void InitItemSetConfig() { this.PluginContext.Trace("Initiating Item Set Config..."); var ctx = this.PluginContext.OrgCtxAsSystemUser; this.ItemSetConfig = ctx.pavelkh_advancedmultiselectitemsetconfigurationSet.Where( r => r.pavelkh_EntityName == this.entityLogicalName && r.pavelkh_ItemSetName == this.itemSetName) .Select(r => new pavelkh_advancedmultiselectitemsetconfiguration { pavelkh_advancedmultiselectitemsetconfigurationId = r.pavelkh_advancedmultiselectitemsetconfigurationId, pavelkh_FetchXml = r.pavelkh_FetchXml, pavelkh_FetchXmlForEditMode = r.pavelkh_FetchXmlForEditMode, pavelkh_IntersectEntityName = r.pavelkh_IntersectEntityName, pavelkh_IntersectEntityRefAttributeName = r.pavelkh_IntersectEntityRefAttributeName, pavelkh_EntityName = r.pavelkh_EntityName, pavelkh_EntityAttributeName = r.pavelkh_EntityAttributeName, pavelkh_ItemSetEntityName = r.pavelkh_ItemSetEntityName, pavelkh_ItemSetEntityAttributeName = r.pavelkh_ItemSetEntityAttributeName, pavelkh_DummySavingField = r.pavelkh_DummySavingField, pavelkh_LabelAttributeName = r.pavelkh_LabelAttributeName, pavelkh_TooltipAttributeName = r.pavelkh_TooltipAttributeName, pavelkh_HandleSecurityPrivileges = r.pavelkh_HandleSecurityPrivileges, pavelkh_EntityHasOrganizationOwnership = r.pavelkh_EntityHasOrganizationOwnership, pavelkh_ItemSetEntityHasOrganizationOwnership = r.pavelkh_ItemSetEntityHasOrganizationOwnership }) .FirstOrDefault(); if (this.ItemSetConfig != null) { return; } var errorMessage = $"An error occurred while getting the list of items. '{this.itemSetName}' Item Set for {this.entityLogicalName} entity is not found in the configuration."; throw new InvalidPluginExecutionException(errorMessage); }