Skip to content

Commit 4addba8

Browse files
committed
Doing what I can to generate alias for link-entity autmagically #1162
1 parent e8a148f commit 4addba8

File tree

13 files changed

+430
-154
lines changed

13 files changed

+430
-154
lines changed

FetchXmlBuilder/Controls/FetchXmlElementControlBase.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ static FetchXmlElementControlBase()
5050

5151
protected void InitializeFXB(Dictionary<string, string> collection, FetchXmlBuilder fetchXmlBuilder, TreeBuilderControl tree, TreeNode node)
5252
{
53+
Cursor = Cursors.WaitCursor;
5354
BeginInit();
5455

5556
fxb = fetchXmlBuilder;
@@ -88,6 +89,7 @@ protected void InitializeFXB(Dictionary<string, string> collection, FetchXmlBuil
8889
ValidateControlRecursive(this);
8990

9091
EndInit();
92+
Cursor = Cursors.Default;
9193
}
9294

9395
protected FetchXmlBuilder fxb { get; set; }
@@ -269,7 +271,9 @@ public void EndInit()
269271
initCount--;
270272

271273
if (initCount == 0)
274+
{
272275
Initialized?.Invoke(this, EventArgs.Empty);
276+
}
273277
}
274278

275279
public event EventHandler Initialized;

FetchXmlBuilder/Controls/linkEntityControl.Designer.cs

Lines changed: 46 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FetchXmlBuilder/Controls/linkEntityControl.cs

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.Xrm.Sdk;
22
using Microsoft.Xrm.Sdk.Metadata;
3+
using Rappen.XRM.Helpers.Extensions;
34
using Rappen.XRM.Helpers.FetchXML;
45
using Rappen.XTB.FetchXmlBuilder.Builder;
56
using Rappen.XTB.FetchXmlBuilder.ControlsClasses;
@@ -15,6 +16,8 @@ namespace Rappen.XTB.FetchXmlBuilder.Controls
1516
public partial class linkEntityControl : FetchXmlElementControlBase
1617
{
1718
private int relationshipWidth;
19+
private bool aliasset;
20+
private string lastalias;
1821

1922
public linkEntityControl() : this(null, null, null)
2023
{
@@ -26,6 +29,9 @@ public linkEntityControl(TreeNode node, FetchXmlBuilder fetchXmlBuilder, TreeBui
2629
BeginInit();
2730
chkOnlyLpks.Checked = fetchXmlBuilder.settings.LinkEntityIdAttributesOnly;
2831
InitializeFXB(null, fetchXmlBuilder, tree, node);
32+
picAliasRegen.Enabled = fxb.settings.LinkEntityAliasGenerate != Settings.LinkEntityAlias.None;
33+
aliasset = !string.IsNullOrWhiteSpace(txtAlias.Text);
34+
lastalias = txtAlias.Text;
2935
EndInit();
3036
RefreshAttributes();
3137
}
@@ -78,6 +84,87 @@ private void cmbEntity_SelectedIndexChanged(object sender, EventArgs e)
7884
{
7985
RefreshAttributes();
8086
}
87+
GenerateAlias();
88+
}
89+
90+
private void GenerateAlias()
91+
{
92+
if (aliasset)
93+
{
94+
return;
95+
}
96+
if (!IsInitialized)
97+
{
98+
return;
99+
}
100+
if (fxb.settings.LinkEntityAliasGenerate == Settings.LinkEntityAlias.None)
101+
{
102+
return;
103+
}
104+
var aliasentities = fxb.dockControlBuilder.GetEntityNodes(needsalias: true).Where(ae => ae.Node != Node);
105+
switch (fxb.settings.LinkEntityAliasGenerate)
106+
{
107+
case Settings.LinkEntityAlias.Acronym:
108+
var entitymeta = fxb.GetEntity(cmbEntity.Text);
109+
if (entitymeta == null)
110+
{
111+
return;
112+
}
113+
var displayname = entitymeta.ToDisplayName();
114+
115+
// Finding unique acronym
116+
var acronym = string.Empty;
117+
var acronymlength = 1;
118+
while (string.IsNullOrEmpty(acronym))
119+
{
120+
var tempacronym = displayname.ToAcronym(acronymlength, includeAllWordInitials: true);
121+
if (acronymlength >= displayname.Length)
122+
{
123+
acronym = tempacronym;
124+
}
125+
else if (!aliasentities.Any(ae => ae.Alias.RemoveTrailingDigits() == tempacronym))
126+
{ // Not used by other link-entities
127+
acronym = tempacronym;
128+
}
129+
else if (aliasentities.Any(ae => ae.Alias.RemoveTrailingDigits() == tempacronym && ae.LogicalName == entitymeta.LogicalName))
130+
{ // Used by this link-entity
131+
acronym = tempacronym;
132+
}
133+
else
134+
{ // Try longer acronym
135+
acronymlength++;
136+
}
137+
}
138+
139+
// Finding possible number
140+
var number = 0;
141+
while (number < 1000)
142+
{
143+
var tempacronym = acronym + (number > 0 ? number.ToString() : "");
144+
if (!aliasentities.Any(ae => ae.Alias == tempacronym))
145+
{ // Not used by other link-entities
146+
txtAlias.Text = tempacronym;
147+
return;
148+
}
149+
number++;
150+
}
151+
break;
152+
153+
case Settings.LinkEntityAlias.LogicalName:
154+
var logicalname = cmbEntity.Text;
155+
number = 1;
156+
while (number < 1000)
157+
{
158+
var tempalias = logicalname + (number > 0 ? number.ToString() : "");
159+
if (!aliasentities.Any(ae => ae.Alias == tempalias))
160+
{ // Not used by other link-entities
161+
txtAlias.Text = tempalias;
162+
return;
163+
}
164+
number++;
165+
}
166+
break;
167+
}
81168
}
82169

83170
private void RefreshRelationships()
@@ -468,5 +555,13 @@ public override void Focus()
468555
{
469556
cmbRelationship.Focus();
470557
}
558+
559+
private void picAliasRegen_Click(object sender, EventArgs e)
560+
{
561+
Cursor = Cursors.WaitCursor;
562+
aliasset = false;
563+
GenerateAlias();
564+
Cursor = Cursors.Default;
565+
}
471566
}
472567
}

FetchXmlBuilder/Controls/linkEntityControl.resx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,26 @@
117117
<resheader name="writer">
118118
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120+
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
121+
<value>17, 17</value>
122+
</metadata>
120123
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
121-
<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
124+
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
122125
<value>
123126
iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
124-
DQAACw0B7QfALAAAAMNJREFUKFNjcKzZ/l8ucysYT1259/+BAwcYQFgpGyKGjK0rt/9n0Mzf9j+odef/
125-
lgV7/m/Yvh+uoW3hHrAYCDvVAhVGbv4PMgSsoWLmbrhCdFwze/d/tpjN/13qdhDWAFPcPH/P/4Z5e/Br
126-
qEZSDOLj1YCuGIRBbC2gWgwN2BQjYxQNhBSDMFzDnn0H/qvmbgUHIzaFa7ft/z9p+V5UJ+3dfwCnySie
127-
9mrY8b9sxm682L8ZGg/ejTv+axdsIwq71e34DwDIiV/OjEilhQAAAABJRU5ErkJggg==
127+
DAAACwwBP0AiyAAAAMZJREFUKFNjcKzZ/l8ucysYT1259/+BAwcYQFgpGyKGjK0rt/9n0Mzf9j+odef/
128+
lgV7/m/Yvh+uoW3hHrAYCDvVbv/PELn5P8gQsIaKmbvhCtFxzezd/9liNv93qdtBWANMcfP8Pf8b5u3B
129+
r6EaSTGIj1cDumIQBrG18rdhasCmGBmjaCCkGEXDnn0H/qvmbgUHI7oiEF67bf//Scv3ojpp7/4DWBWD
130+
MIqnvRp2/C+bsRsv9m+GxoN3447/2gXbiMJudTv+AwDIiV/OeNE/cwAAAABJRU5ErkJggg==
128131
</value>
129132
</data>
130-
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
133+
<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
131134
<value>
132135
iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
133-
DQAACw0B7QfALAAAAMNJREFUKFNjcKzZ/l8ucysYT1259/+BAwcYQFgpGyKGjK0rt/9n0Mzf9j+odef/
134-
lgV7/m/Yvh+uoW3hHrAYCDvVAhVGbv4PMgSsoWLmbrhCdFwze/d/tpjN/13qdhDWAFPcPH/P/4Z5e/Br
135-
qEZSDOLj1YCuGIRBbC2gWgwN2BQjYxQNhBSDMFzDnn0H/qvmbgUHIzaFa7ft/z9p+V5UJ+3dfwCnySie
136-
9mrY8b9sxm682L8ZGg/ejTv+axdsIwq71e34DwDIiV/OjEilhQAAAABJRU5ErkJggg==
136+
DAAACwwBP0AiyAAAAMZJREFUKFNjcKzZ/l8ucysYT1259/+BAwcYQFgpGyKGjK0rt/9n0Mzf9j+odef/
137+
lgV7/m/Yvh+uoW3hHrAYCDvVbv/PELn5P8gQsIaKmbvhCtFxzezd/9liNv93qdtBWANMcfP8Pf8b5u3B
138+
r6EaSTGIj1cDumIQBrG18rdhasCmGBmjaCCkGEXDnn0H/qvmbgUHI7oiEF67bf//Scv3ojpp7/4DWBWD
139+
MIqnvRp2/C+bsRsv9m+GxoN3447/2gXbiMJudTv+AwDIiV/OeNE/cwAAAABJRU5ErkJggg==
137140
</value>
138141
</data>
139142
</root>

FetchXmlBuilder/FetchXmlBuilder.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,9 @@
764764
<Version>1.2025.10.74</Version>
765765
</PackageReference>
766766
</ItemGroup>
767+
<ItemGroup>
768+
<None Include="Resources\icon-redo-16.png" />
769+
</ItemGroup>
767770
<Import Project="..\MarkMpn.FetchXmlToWebAPI\MarkMpn.FetchXmlToWebAPI\MarkMpn.FetchXmlToWebAPI.projitems" Label="Shared" />
768771
<Import Project="..\FXBEditorUtils\FXBEditorUtils.projitems" Label="Shared" />
769772
<Import Project="..\MarkMpn.XmlSchemaAutocomplete\MarkMpn.XmlSchemaAutoComplete\MarkMpn.XmlSchemaAutoComplete.projitems" Label="Shared" />

0 commit comments

Comments
 (0)