I am creating layers and attributes using Geoprocessing.ExecuteToolAsync. The workflow is as follows:
In the loop, after the first field is created, the second and subsequent fields cannot be added. The error message is: "Table is being edited."
If I create the layer without adding any fields and then try to delete the table manually in the Pro UI, I encounter the same error.
Below is a sample of my usage of Geoprocessing.ExecuteToolAsync:
var args = Geoprocessing.MakeValueArray(dataset, fieldName, fieldType.ToUpper(), null, null,
fieldLength, fieldAlias, isNullable ? "NULABLE" : "NON_NULLABLE");
System.Threading.CancellationTokenSource _cts = new System.Threading.CancellationTokenSource();
var results = await Geoprocessing.ExecuteToolAsync("management.AddField", args, null, _cts.Token,
(eventName, o) =>
{
switch (eventName)
{
case "OnValidate":
if (((IGPMessage[])o).Any(it => it.Type == GPMessageType.Warning))
{
_cts.Cancel();
}
break;
case "OnMessage":
case "OnProgressMessage":
IGPMessage[] gpMsgs = o as IGPMessage[];
if (gpMsgs != null)
{
// Check for any renamed warning messages. If there is one, get the new field name
// from it.
foreach (IGPMessage gpMsg in gpMsgs.Where(i => i.Type == GPMessageType.Warning))
{
Match renamedMsg = Regex.Match(gpMsg.Text, renameWarningPattern);
if (renamedMsg != null)
{
string[] words = renamedMsg.Value.Split(' ');
if (words.Length > 0)
{
// The last word is the new field name; strip off anything that isn't a 'word' character (e.g. strip off
// any trailing '...'.
Match wordMatch = Regex.Match(words.Last(), @"(\w*)");
if (wordMatch != null)
newFldName = wordMatch.Value;
}
}
}
}
break;
case "OnProgressPos":
// MessageBox.Show($"{eventName}: {o} %");
break;
default:
// MessageBox.Show($"{eventName}: {o} %");
break;
}
}, GPExecuteToolFlags.None);
if (results.IsFailed)
return "";
else
return newFldName;
Solved! Go to Solution.
Hi,
You can use management.AddFields to add all fields in one call.
The Pro SDK also provides a .NET API that allows you to create new feature classes with fields.
https://github.com/Esri/arcgis-pro-sdk/wiki/ProConcepts-DDL