Konfigurieren Sie den Benutzer für die Lösung von itgenexl029 in der SQL-Abfrage in Exact Online

374
Roy Kosmeijer

Wenn ich die folgende Abfrage mit Invantive Data Hub unter Exact Online (Niederlande) ausführen:

create or replace table spn@inmemorystorage as select /*+ ods(false) */  spn.item_code_attr, spn.warehouse_code_attr, spn.item_description, spn.currentquantity, spn.planning_in, spn.planning_out, spn.currentquantity + spn.planning_in - spn.planning_out plannedquantity from exactonlinexml..StockPositions spn -- -- Filter out no stock nor planned. -- where ( spn.currentquantity !=0 or  spn.planning_in != 0 or  spn.planning_out != 0 ) 

Ich erhalte folgende Fehlermeldung:

Error itgencun016: Uitroep itgenexl029: U heeft onvoldoende rechten om deze actie uit te voeren. 

mit Aufrufstack:

Error itgencun017: Type: Invantive.Data.ServiceException at Invantive.Data.ValidationException..ctor(String messageCode, String messageText, String kindRequest, String localStackTrace, String nk, Exception innerException) at Invantive.Data.InvantiveSystemException..ctor(String validationCode, String errorMessage, String kindRequest, String stackTrace, String nk, Exception innerException) at Invantive.Data.ExactOnlineXmlProvider.FailOnAnswerWithErrors(XmlDocument document, String topic, String& responseErrorsOnly, String& responseXmlPayloadRetry, Exception& ex, Int32& countSuccess, Int32& countWarning, Int32& countError, Int32& countFatalError) at Invantive.Data.ExactOnlineXmlProvider.GetDataFromWebService(String url, String cacheId, String partitionCode, String topic, XmlObjectDefinition objectDefinition, Int32 pageCounter, String previousTimeStampLastRecord, String callSafeNameOverrule, Int32& pageSize, Int32& count, String& timeStampLastRecord, Int64& documentSizeCharacters, Int64& documentSizeBytes) at Invantive.Data.ExactOnlineXmlProvider.<GetRowsDataFromWebService>d__232.MoveNext() at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__2.MoveNext() at Invantive.Data.CachedEnumerable`1.TryGetNext(Int32 index, T& item) at Invantive.Data.CachedEnumerable`1.<GetEnumerator>d__6.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d__16`2.MoveNext() at Invantive.Sql.DataSourceOrFunctionTree.<GetDataFromDataContainer>d__50.MoveNext() at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__2.MoveNext() at Invantive.Data.CachedEnumerable`1.TryGetNext(Int32 index, T& item) at Invantive.Data.CachedEnumerable`1.<GetEnumerator>d__6.MoveNext() at Invantive.Sql.FirehoseResultSet.<Iterator>d__57.MoveNext() at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__2.MoveNext() at Invantive.Data.CachedEnumerable`1.TryGetNext(Int32 index, T& item) at Invantive.Data.CachedEnumerable`1.<GetEnumerator>d__6.MoveNext() at Invantive.Sql.FirehoseResultSet.<Iterator>d__57.MoveNext() at Invantive.Sql.FilterIterator.<Iterator>d__3.MoveNext() at Invantive.Sql.ChainedFirehose.<Iterator>d__11.MoveNext() at Invantive.Sql.SelectListIterator.<Iterator>d__7.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) at Invantive.Sql.DdlStatementTree.OnExecute(ParameterList parameters, ExpressionParser expressionParser) at Invantive.Sql.QueryTree.Execute(ParameterList parameters, ExpressionParser expressionParser) at Invantive.Sql.QueryPlan.ForcePlan() at Invantive.Sql.QueryPlan.get_Fields() at Invantive.Sql.QueryPlan.get_FieldCount() at Invantive.Data.QueryPlanCacheEntry.<>c.<.ctor>b__12_0(IQueryPlan qp) at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at Invantive.Data.QueryPlanCacheEntry..ctor(String sqlStatement, IQueryPlan[] queryPlans, ParameterList parameters) at Invantive.Sql.SqlEngine.ExecuteAndFetch(IProviderManager manager, String sqlStatement, ParameterList parameters, Boolean allowSelect) at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(String actionSql, ParameterList parameters, String& handlingPath) at Invantive.Data.ConnectionManager.PassthroughSqlActionTable(String actionSql, ParameterList parameters) at Invantive.Data.ActionProceduresBase.PassthroughSqlActionTable(String actionSql, ParameterList parameters) at Invantive.Producer.QueryEngine.QueryEngine.ProcessStatement(String sqlStatement, ResultSet& resultSet, Action`1 fetchMoreRows, Action`7 executeStatement, Boolean isInInteractiveMode, ScriptingLanguageNextStepSpecification& nextStepSpecification) at Invantive.Producer.QueryEngine.QueryEngine.ProcessStatements(Action`1 fetchMoreRows, Action`7 executeStatement, IEnumerable`1 statements, ScriptingLanguageNextStepSpecification& exitSpecification) at Invantive.Producer.QueryEngine.QueryEngine.Run(String[] arguments) at Invantive.Producer.QueryEngine.Program.Main(String[] arguments) at Invantive.Data.ExactOnlineXmlProvider.GetDataFromWebService(String url, String cacheId, String partitionCode, String topic, XmlObjectDefinition objectDefinition, Int32 pageCounter, String previousTimeStampLastRecord, String callSafeNameOverrule, Int32& pageSize, Int32& count, String& timeStampLastRecord, Int64& documentSizeCharacters, Int64& documentSizeBytes) in File348:line 7573 at Invantive.Data.ExactOnlineXmlProvider.<GetRowsDataFromWebService>d__232.MoveNext() in File348:line 6871 at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__2.MoveNext() in File275:line 3987 at Invantive.Data.CachedEnumerable`1.TryGetNext(Int32 index, T& item) in File275:line 4163 at Invantive.Data.CachedEnumerable`1.<GetEnumerator>d__6.MoveNext() in File275:line 4112 at System.Linq.Enumerable.<SelectManyIterator>d__16`2.MoveNext() at Invantive.Sql.DataSourceOrFunctionTree.<GetDataFromDataContainer>d__50.MoveNext() in File54:line 420 at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__2.MoveNext() in File275:line 3987 at Invantive.Data.CachedEnumerable`1.TryGetNext(Int32 index, T& item) in File275:line 4163 at Invantive.Data.CachedEnumerable`1.<GetEnumerator>d__6.MoveNext() in File275:line 4112 at Invantive.Sql.FirehoseResultSet.<Iterator>d__57.MoveNext() in File25:line 598 at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__2.MoveNext() in File275:line 3987 at Invantive.Data.CachedEnumerable`1.TryGetNext(Int32 index, T& item) in File275:line 4163 at Invantive.Data.CachedEnumerable`1.<GetEnumerator>d__6.MoveNext() in File275:line 4112 at Invantive.Sql.FirehoseResultSet.<Iterator>d__57.MoveNext() in File25:line 598 at Invantive.Sql.FilterIterator.<Iterator>d__3.MoveNext() in File24:line 93 at Invantive.Sql.ChainedFirehose.<Iterator>d__11.MoveNext() in File22:line 82 at Invantive.Sql.SelectListIterator.<Iterator>d__7.MoveNext() in File30:line 120 at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) at Invantive.Sql.DdlStatementTree.OnExecute(ParameterList parameters, ExpressionParser expressionParser) in File55:line 195 at Invantive.Sql.QueryTree.Execute(ParameterList parameters, ExpressionParser expressionParser) in File33:line 174 at Invantive.Sql.QueryPlan.ForcePlan() in File32:line 89 at Invantive.Sql.QueryPlan.get_Fields() in File32:line 66 at Invantive.Sql.QueryPlan.get_FieldCount() in File32:line 77 at Invantive.Data.QueryPlanCacheEntry.<>c.<.ctor>b__12_0(IQueryPlan qp) in File242:line 68 at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at Invantive.Data.QueryPlanCacheEntry..ctor(String sqlStatement, IQueryPlan[] queryPlans, ParameterList parameters) in File242:line 68 at Invantive.Sql.SqlEngine.ExecuteAndFetch(IProviderManager manager, String sqlStatement, ParameterList parameters, Boolean allowSelect) in File37:line 538 at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(String actionSql, ParameterList parameters, String& handlingPath) in File74:line 4546 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(String actionSql, ParameterList parameters, String& handlingPath) in File74:line 4669 at Invantive.Data.ConnectionManager.PassthroughSqlActionTable(String actionSql, ParameterList parameters) in File74:line 2487 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Invantive.Data.ConnectionManager.PassthroughSqlActionTable(String actionSql, ParameterList parameters) in File74:line 2501 at Invantive.Data.ActionProceduresBase.PassthroughSqlActionTable(String actionSql, ParameterList parameters) in File64:line 134 at Invantive.Producer.QueryEngine.QueryEngine.ProcessStatement(String sqlStatement, ResultSet& resultSet, Action`1 fetchMoreRows, Action`7 executeStatement, Boolean isInInteractiveMode, ScriptingLanguageNextStepSpecification& nextStepSpecification) 

Angeblich handelt es sich hierbei um ein Berechtigungsproblem für den aktuellen Exact-Benutzer über die Exact XML-APIs. Früher hat dies funktioniert, aber nachdem der Benutzer deaktiviert / aktiviert wurde, ist die StockPositions-API nicht mehr erreichbar.

Wie muss ich den Benutzer konfigurieren, um sicherzustellen, dass die StockPositions-API verfügbar ist?

1

1 Antwort auf die Frage

1
Guido Leenders

Das Berechtigungsmodell von Exact Online eignet sich nicht wirklich für komplexe Sicherheitseinstellungen. Es hat keine rollenbasierte Zugriffssteuerung oder eine einfache Zuordnung von Sicherheitseinstellungen zu Formularen und APIs.

In diesem Fall haben Sie Glück. Da StockPositionses sich um eine XML-API-basierte Tabelle handelt, können Sie in der Webbenutzeroberfläche von Exact Online sehen, ob der Benutzer über Berechtigungen verfügt.

Um dies zu überprüfen:

  • Melden Sie sich als Benutzer an, der die Abfrage ausführt, und verwenden Sie denselben Benutzernamen und dasselbe Kennwort für Exact Online.
  • Klicken Sie auf den Namen der Firma oben links.
  • Klicken Sie auf die Option Import / Export.
  • Klicken Sie auf XML-Methode.
  • Alle verfügbaren APIs werden wie folgt angezeigt: Autorisierte XML-APIs
  • Zum Download sollten Sie prüfen, ob die Option 'Export' angezeigt wird. Prüfen Sie beim Hochladen, ob "Import" vorhanden ist.

Wenn die Berechtigungen für die API fehlen, kann ein Hauptbenutzer, der Benutzerrechte einrichten kann, Exact Online öffnen.

Dann:

  • Klicken Sie auf Firma
  • Klicken Sie auf Stammdaten
  • Klicken Sie auf Benutzer -> Übersicht
  • Wählen Sie den Benutzer aus.
  • Klicken Sie in der Monitorgruppe auf Rechte.
  • Sie sehen eine umfangreiche Liste von Hunderten von Kontrollkästchen: Privilegien für Benutzer
  • Jedes Kontrollkästchen repräsentiert einige Privilegien des Benutzers.
  • Suchen Sie im Allgemeinen auf der Registerkarte nach dem Hauptthema, auf das der Benutzer zugreifen muss, und testen Sie die Effekte für den Benutzer. Oder wenden Sie sich an den exakten Support, um Rat zu erhalten.