public void GeneratorCode() { var webApiCode = string.Empty; var @class = SafeJsName(EntityName.ToLower()); var Class = EntityName; webApiCode += $"var {ProjectName};\r\n"; webApiCode += $"(function ({ProjectName}) {{\r\n"; webApiCode += $"\t'use strict';\r\n"; webApiCode += $"\t{ProjectName}.{Class}Api = function (e) {{\r\n"; webApiCode += $"\t\tvar EMPTY_STRING = '';\r\n"; webApiCode += $"\t\tvar f = '@OData.Community.Display.V1.FormattedValue';\r\n"; var webapi = Utility.ReadEmbeddedResource("DynamicsCrm.DevKit.Resources.WebApi.js"); webApiCode += webapi; webApiCode += $"\t\tvar {@class} = {{\r\n"; foreach (var crmAttribute in Fields) { if (crmAttribute.IsDeprecated) { continue; } if (crmAttribute.AttributeOf != null && crmAttribute.FieldType == AttributeTypeCode.Virtual && crmAttribute.LogicalName != "entityimage") { continue; } if (crmAttribute.FieldType == AttributeTypeCode.EntityName || crmAttribute.FieldType == AttributeTypeCode.PartyList) { continue; } if (crmAttribute.AttributeOf != null && crmAttribute.AttributeOf.ToLower() + "name" == crmAttribute.LogicalName) { continue; } if (crmAttribute.AttributeOf != null && crmAttribute.LogicalName.EndsWith("yominame") && !crmAttribute.IsValidForCreate && !crmAttribute.IsValidForUpdate) { continue; } if (crmAttribute.FieldType == AttributeTypeCode.Memo || crmAttribute.FieldType == AttributeTypeCode.String || crmAttribute.FieldType == AttributeTypeCode.Picklist || crmAttribute.FieldType == AttributeTypeCode.State || crmAttribute.FieldType == AttributeTypeCode.Status || crmAttribute.FieldType == AttributeTypeCode.Uniqueidentifier || crmAttribute.FieldType == AttributeTypeCode.Boolean || crmAttribute.FieldType == AttributeTypeCode.Integer || crmAttribute.FieldType == AttributeTypeCode.BigInt || crmAttribute.FieldType == AttributeTypeCode.Double || crmAttribute.FieldType == AttributeTypeCode.Decimal || crmAttribute.FieldType == AttributeTypeCode.Money ) { webApiCode += $"\t\t\t{crmAttribute.SchemaName}: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } else if (crmAttribute.IsMultiSelectPicklist) { webApiCode += $"\t\t\t{crmAttribute.SchemaName}: {{ a: \"{crmAttribute.LogicalName}\", g: true }},\r\n"; } else if (crmAttribute.FieldType == AttributeTypeCode.DateTime) { if (crmAttribute.DateTimeBehavior == DateTimeBehavior.DateOnly) { webApiCode += $"\t\t\t{crmAttribute.SchemaName}_DateOnly: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } else if (crmAttribute.DateTimeBehavior == DateTimeBehavior.TimeZoneIndependent) { if (crmAttribute.DateTimeFormat == DateTimeFormat.DateOnly) { webApiCode += $"\t\t\t{crmAttribute.SchemaName}_TimezoneDateOnly: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } else { webApiCode += $"\t\t\t{crmAttribute.SchemaName}_TimezoneDateAndTime: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } } else if (crmAttribute.DateTimeBehavior == DateTimeBehavior.UserLocal) { if (crmAttribute.DateTimeFormat == DateTimeFormat.DateOnly) { webApiCode += $"\t\t\t{crmAttribute.SchemaName}_UtcDateOnly: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } else { webApiCode += $"\t\t\t{crmAttribute.SchemaName}_UtcDateAndTime: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } } } else if (crmAttribute.FieldType == AttributeTypeCode.Owner) { webApiCode += $"\t\t\tOwnerId_systemuser: {{ b: \"ownerid\", a: \"_ownerid_value\", c: \"systemusers\", d: \"systemuser\" }},\r\n"; webApiCode += $"\t\t\tOwnerId_team: {{ b: \"ownerid\", a: \"_ownerid_value\", c: \"teams\", d: \"team\" }},\r\n"; } else if (crmAttribute.FieldType == AttributeTypeCode.Lookup || crmAttribute.FieldType == AttributeTypeCode.Customer || (crmAttribute.EntityReferenceLogicalName == null ? false : crmAttribute.EntityReferenceLogicalName.Contains(";"))) { var entities = crmAttribute.EntityReferenceLogicalName.Split(";".ToCharArray()); crmAttribute.LogicalCollectionName = GetLogicalCollectionName(crmAttribute); crmAttribute.NavigationPropertyName = GetNavigationPropertyName(crmAttribute); var collections = crmAttribute.LogicalCollectionName.Split(";".ToCharArray()); var navigations = crmAttribute.NavigationPropertyName.Split(";".ToCharArray()); if (entities.Length == 1) { if (crmAttribute.IsCustomAttribute) { webApiCode += $"\t\t\t{crmAttribute.SchemaName}: {{ b: \"{crmAttribute.SchemaName}\", a: \"_{crmAttribute.LogicalName}_value\", c: \"{collections[0]}\", d: \"{entities[0]}\" }},\r\n"; } else { webApiCode += $"\t\t\t{crmAttribute.SchemaName}: {{ b: \"{crmAttribute.LogicalName}\", a: \"_{crmAttribute.LogicalName}_value\", c: \"{collections[0]}\", d: \"{entities[0]}\" }},\r\n"; } } else { if (entities.Length != collections.Length || entities.Length != navigations.Length || collections.Length != navigations.Length) { continue; } var j = 0; foreach (var e in entities) { if (crmAttribute.EntityName == "audit" && e == "externalparty") { continue; } webApiCode += $"\t\t\t{navigations[j]}: {{ b: \"{navigations[j]}\", a: \"_{crmAttribute.LogicalName}_value\", c: \"{collections[j]}\", d: \"{entities[j]}\" }},\r\n"; j++; } } } else if (crmAttribute.FieldType == AttributeTypeCode.ManagedProperty) { webApiCode += $"\t\t\t{crmAttribute.SchemaName}: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } else { if (crmAttribute.SchemaName == "EntityImage" || crmAttribute.SchemaName == "FullImageData" || crmAttribute.SchemaName == "ImageData") { webApiCode += $"\t\t\t{crmAttribute.SchemaName}: {{ a: \"{crmAttribute.LogicalName}\" }},\r\n"; } else { webApiCode += $"\t\t\t{crmAttribute.SchemaName}: {{ a: ?????????? }},\r\n"; } } if (!(crmAttribute.IsValidForCreate || crmAttribute.IsValidForUpdate) || crmAttribute.IsReadOnly) { webApiCode = webApiCode.TrimEnd(" },\r\n".ToCharArray()); webApiCode += $", r: true }},\r\n"; } } webApiCode = webApiCode.TrimEnd(",\r\n".ToCharArray()) + "\r\n"; webApiCode += $"\t\t}};\r\n"; webApiCode += $"\t\tif (e === undefined) e = {{}};\r\n"; webApiCode += $"\t\tvar u = {{}};\r\n"; webApiCode += $"\t\tfor (var field in {@class}) {{\r\n"; webApiCode += $"\t\t\tvar a = {@class}[field].a;\r\n"; webApiCode += $"\t\t\tvar b = {@class}[field].b;\r\n"; webApiCode += $"\t\t\tvar c = {@class}[field].c;\r\n"; webApiCode += $"\t\t\tvar d = {@class}[field].d;\r\n"; webApiCode += $"\t\t\tvar g = {@class}[field].g;\r\n"; webApiCode += $"\t\t\tvar r = {@class}[field].r;\r\n"; webApiCode += $"\t\t\t{@class}[field] = webApiField(e, a, b, c, d, r, u, g);\r\n"; webApiCode += $"\t\t}}\r\n"; var hasPartyList = Fields.Where(f => f.FieldType == AttributeTypeCode.PartyList).Any(); if (hasPartyList) { var logicalName = IsCustomEntity ? $"{Class}_activity_parties" : $"{@class}_activity_parties"; webApiCode += $"\t\tObject.defineProperty({@class}, 'ActivityParties', {{\r\n"; webApiCode += $"\t\t\tget: function () {{ return e['{logicalName}']; }},\r\n"; webApiCode += $"\t\t\tset: function (value) {{\r\n"; webApiCode += $"\t\t\t\te['{logicalName}'] = value;\r\n"; webApiCode += $"\t\t\t\tu['{logicalName}'] = value;\r\n"; webApiCode += $"\t\t\t}}\r\n"; webApiCode += $"\t\t}});\r\n"; } webApiCode += $"\t\t{@class}.Entity = u;\r\n"; webApiCode += $"\t\t{@class}.EntityName = \"{@class}\";\r\n"; webApiCode += $"\t\t{@class}.EntityCollectionName = \"{GetLogicalCollectionName(@class)}\";\r\n"; webApiCode += $"\t\t{@class}[\"@odata.etag\"] = e[\"@odata.etag\"];\r\n"; //webApiCode += JsOptionSetFormCode; //webApiCode += $"\t\t{@class}.OptionSet = optionSet;\r\n"; webApiCode += $"\t\t{@class}.getAliasedValue = function (alias, isMultiOptionSet) {{\r\n"; webApiCode += $"\t\t\tif (e[alias] === undefined || e[alias] === null) {{\r\n"; webApiCode += $"\t\t\t\treturn null;\r\n"; webApiCode += $"\t\t\t}}\r\n"; webApiCode += $"\t\t\tif (isMultiOptionSet) {{\r\n"; webApiCode += $"\t\t\t\treturn e[alias].toString().split(',').map(function (item) {{ return parseInt(item, 10); }});\r\n"; webApiCode += $"\t\t\t}}\r\n"; webApiCode += $"\t\t\treturn e[alias];\r\n"; webApiCode += $"\t\t}}\r\n"; webApiCode += $"\t\t{@class}.getAliasedFormattedValue = function (alias, isMultiOptionSet) {{\r\n"; webApiCode += $"\t\t\tif (e[alias + f] === undefined || e[alias + f] === null) {{\r\n"; webApiCode += $"\t\t\t\treturn EMPTY_STRING;\r\n"; webApiCode += $"\t\t\t}}\r\n"; webApiCode += $"\t\t\tif (isMultiOptionSet) {{\r\n"; webApiCode += $"\t\t\t\treturn e[alias + f].toString().split(';').map(function (item) {{ return item.trim(); }});\r\n"; webApiCode += $"\t\t\t}}\r\n"; webApiCode += $"\t\t\treturn e[alias + f];\r\n"; webApiCode += $"\t\t}}\r\n"; webApiCode += $"\t\treturn {@class};\r\n"; webApiCode += $"\t}};\r\n"; webApiCode += $"}})({ProjectName} || ({ProjectName} = {{}}));"; webApiCode = webApiCode.Replace("\"", "'"); webApiCode = webApiCode.Replace("'*'", "\"*\""); if (!IsDebugWebApi) { webApiCode = Uglify.Js(webApiCode).Code; webApiCode = webApiCode.Replace("\"", "'"); webApiCode = webApiCode.Replace("'*'", "\"*\""); } var code = string.Empty; code += $"'use strict';\r\n"; code += $"/** @namespace {ProjectName} */\r\n"; code += webApiCode; code = code + "\r\n"; var optionSet = Utility.ReadEmbeddedResource("DynamicsCrm.DevKit.Resources.OptionSet.js"); optionSet = optionSet.Replace("[[EntityOptionSet]]", OptionSet_For_d_ts); var optionSetMin = optionSet; if (!IsDebugWebApi) { optionSetMin = Uglify.Js(optionSet).Code; } code += $"/** @namespace OptionSet */\r\n"; code += optionSetMin; WebApiCode = code; var processForms = new List <SystemForm>(); foreach (var form in Forms) { if (CheckedItems.Any(x => form.Name.ToLower() == x.ToLower())) { processForms.Add(form); CheckedItems.RemoveAll(x => x.Equals(form.Name, StringComparison.OrdinalIgnoreCase)); } } foreach (var form in Forms) { if (CheckedItems.Any(x => form.Name.ToLower().EndsWith(x.ToLower()))) { processForms.Add(form); } } WebApiCodeTypeScriptDeclaration = GetWebApiCodeTypeScriptDeclaration(processForms, IsDebugForm, true, IsDebugWebApi, JsFormVersion); }
public async Task <bool> Initialize() { //get all the placeActions of this placeId and processActions for this process //and fill the list in try { CheckedItems = new ObservableCollection <ProcessAction>(); Items = new ObservableCollection <IActionKeeper>(); if (ProcessId != 0) { var processReload = Task.Run(() => ProcessActionKeeper.Reload($"ProcessId={ProcessId}")); var placeReload = Task.Run(() => PlaceActionKeeper.Reload($"PlaceId={PlaceId}")); //go no further till both tasks complete await Task.WhenAll(processReload, placeReload); CheckedItems = new ObservableCollection <ProcessAction>(ProcessActionKeeper.Items); Items = new ObservableCollection <IActionKeeper>(CheckedItems); foreach (var item in Items) { if ((bool)item.IsChecked) { //if item has been saved as checked, don't let anyone change it item.IsMutable = false; } } } else { var placeReload = Task.Run(() => PlaceActionKeeper.Reload($"PlaceId={PlaceId}")); //go no further till task complete await Task.WhenAll(placeReload); } foreach (PlaceAction p in PlaceActionKeeper.Items) { if (!CheckedItems.Any(i => i.ActionId == p.ActionId)) { Items.Add(p); } } IsInitialized = true; Task.Run(() => TakeSnapshot()); if (Items.Any()) { return(true); } else { return(false); } } catch (Exception ex) { throw; } }