THE QUERY STRING \”COMMENT\” IS MISSING OR INVALID
Table of Contents
Od pewnego czasu widziałem tego rodzaju błąd w przepływach pracy Nintex for Office 365, ale w rzeczywistości nigdy nie miałem wystarczającej determinacji, aby sprawdzić, co jest podstawową ich przyczyną. Jednak gdy klient zaczął pytać, ja zacząłem szukać.
Objawy
Błąd The query string \"comment\" is missing or invalid
pojawia się zwykle po zakończeniu zadania (Workflow Task) przepływu pracy i próbie zaewidencjonowania elementu zawierającego komentarz z zadania jako komentarz do zaewidencjonowania. Czasami przepływ pracy zostaje zawieszony, wyświetlając długi komunikat o błędzie, który wygląda jak poniżej:
RequestorId: 2dcb7a0f-917b-f86f-0000-000000000000. Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ApplicationException: HTTP 400 {"error":{"code":"-1, Microsoft.SharePoint.Client.InvalidClientQueryException","message":{"lang":"en-US","value":"The query string \"comment\" is missing or invalid."}}} ........ at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation) Exception from activity Throw If Sequence Sequence TryCatch Sequence Microsoft.SharePoint.WorkflowServices.Activities.RetryForDurationPolicy HttpPost Check In Item NintexActivities.WorkflowXaml_590a5ff5_9b4a_4c6e_a528_f22c544e7779 Sequence Microsoft.SharePoint.WorkflowServices.Activities.AppOnlySequence Rejected ControlFlowStep Assign a task Approval request Sequence If If While Routing "State Machine" Sequence Flowchart 01 Request approval - DEE.WorkflowXaml_03d7ffe8_c113_4610_8142_350ab919bb39". Instance last run on: 2021-07-14T04:16:23.217.
Co mogę z niego wyczytać? To, że wystąpił błąd w polu „comment”, a następnie uważnie czytając stack trace, mogę się domyślić, że jest to związane z akcją „Check In Item”. Peszek. Nie można wznowić takiego przepływu pracy bez względu na to, co robisz. Musisz naprawić problem i uruchomić go ponownie.
Przyczyna
Powód okazał się dość prosty. Komentarz zawierał znak specjalny – apostrof (’). Ale, zgodnie z moim dalszym dochodzeniem, ta sama sytuacja ma miejsce, jeśli komentarz zawiera znak ampersand (&). I tylko w sytuacji, gdy check in odbywa się za pomocą prostej akcji „Check In Item”. Czemu?
Ponieważ usługa Nintex używa POST do zewidencjonowania dokumentu za pomocą endpointów SharePoint bez pełnego escapeowania znaków specjalnych. Oto, co wsparcie Nintex znalazło w swoich logach:
https://poszytek.sharepoint.com/sites/mysite/_api/web/getfilebyserverrelativeurl(@Url)/CheckIn(comment=@Comment,%20checkintype=@CheckinType)?%40Url='%2Fsites%2Fmysite%2FDocuments%2FTest%20document.docx'&%40Comment=<https://poszytek.sharepoint.com/sites/mysite/_api/web/getfilebyserverrelativeurl(@Url)/CheckIn(comment=@Comment,%20checkintype=@CheckinType)?%40Url='%2Fsites%2Fmysite%2FDocuments%2FTest%20document.docx'&%40Comment=>'
%E2%80%A2+%3Cb%3EApprover+rejection+comment:+%3C%2Fb%3E%3Cbr%2F%3ERejected+by:+Poszytek%2C+Tomasz+S+%7C+%3Cbr%2F%3ERejection+date%2Ftime:+13.07.2021+11:47+-+13.07.2021+12:02+%7C+%3Cbr%2F%3ERejection+comment:+3.3.2%0D%0A5.+Just+say+to+record+in+the+required+database+as+SP5+will+be+changing+from+paper+soon%0D%0A%0D%0A63.4.2%0D%0A3.+Don't+make+reference+to+P:Drive+-+If+a+standard+is+referred+to+then+it+needs+to+be+in+a+standard+form%0D%0A+%7C'&%40CheckInType=0"
Jak widać, jest to zapytanie wysłane w formacie odata, które zawiera komentarz do check in. Podkreśliłem część, która powoduje problem. Apostrof, który nie jest escapeowany, w rzeczywistości przedwcześnie kończy parametr „Comment” (zaznaczony na fioletowo). Tak więc wszystko, co znajduje się po pojedynczym cudzysłowie w „Don't
”, w rzeczywistości nie spełnia wymaganego formatu odata i powoduje problem.
Rozwiązanie
Najbardziej właściwym rozwiązaniem jest zamienienie prostej akcji „Check in item” na akcję „Office 365 Check in items„.
Ważne! Jeśli używasz innych działań do wyewidencjonowania, zaewidencjonowania, ustawienia statusu zatwierdzenia itp., upewnij się, że używasz ich wszystkich z jednej grupy. Czyli zwykłe lub z grupy „Office 365”. Jeśli nie, możesz zmierzyć się z innym problemem, że m.in. plik jest zablokowany do edycji przez to samo konto, które wykonuje przepływ pracy, ponieważ wyewidencjonowało plik za pomocą zwykłej akcji, a teraz próbuje go zaewidencjonować za pomocą Office 365. W jakiś sposób SharePoint uważa, że są to dwa różne konta.
Innym rozwiązaniem, którego ja używam, jest wykorzystanie akcji „Regular Expression” do zamiany & oraz ’ na ich odpowiedniki: & (FULLWIDTH AMPERSAND, źródło) i ` (wsteczny apostrof, back qoute, znajduje się na przycisku poniżej tyldy). Następnie użycie takiego „wyescapeowanego” stringa jako komentarza w akcji „Check in item”.