Json Сообщение от Django на Камунду - PullRequest
0 голосов
/ 23 апреля 2020

В дополнение к моему предыдущему сообщению вчера: Отправка запроса на внешнюю службу отдыха с использованием Django - используйте возвращенное значение json для обновления модели

Мне удалось опубликовать данные на Camunda, используя Django - request.post. Используя следующий скрипт:

payload = "{\n    \"businessKey\": \"SomeValue\",\n    \"variables\": {\n        \"Organisation_ID\": {\n            \"value\": \"SOmeUUID\",\n            \"type\": \"String\"\n        },\n        \"UserID\": {\n            \"value\":\"Some User ID\",\n            \"type\": \"String\"\n        }\n    }\n}"

Однако, когда я начинаю использовать переменные из формы и форматирую свою полезную нагрузку, используя

class StartProcessView(View): 
template_name = 'startdeliveryphase.html'
def get(self,request, *args, **kwargs):
    form = IntStartDeliveryPhase
    return render(request, self.template_name,{'form':form})

def post(self,request, *args, **kwargs):      
    form = IntStartDeliveryPhase(request.POST or None)
    if form.is_valid():

        data = form.cleaned_data
        OrganisationID = data['Form_Field_OrganisationID']
        UserID = data['Form_Field_User_ID']
        BusinessKey = data['Form_Field_Business_Key']
        url = "http://localhost:8080/engine-rest/process-definition/key/Process_B_PerProject/start"
        payload  =  {"businessKey":BusinessKey,"variables":[{"Organisation":[{"value":OrganisationID, "type":"String"}]},[{"Startedby":[{"value":UserID,"type":"String"}]}]]}


        headers = {
        'Content-Type': 'application/json'
        }
        response = requests.request("POST", url, headers=headers, data = payload)
        #print(repsonse.errors)
        print(response.text.encode('utf8'))
        return render(request)    
    else:
        return render(request,self.template_name,{'form':form})

, я получаю сообщение об ошибке от механизма camunda: -

b'{"type":"JsonParseException","message":"Unrecognized token \'businessKey\': was expecting (\'true\', \'false\' or \'null\')\\n at [Source: (org.camunda.bpm.engine.rest.filter.EmptyBodyFilter$1$1); line: 1, column: 13]"}'

локальные переменные показывают следующее:

▼ Local vars
Variable    Value
BusinessKey 
'1qaz'
OrganisationID  
<Organisation: Some Local Authoristy>
UserID  
<Actor_User: me@me.com>
args    
()
data    
{'Form_Field_Business_Key': '1qaz',
 'Form_Field_CamundaInstanceID': 'sss',
 'Form_Field_Camunda_HRef': 'ss',
 'Form_Field_Camunda_TenantID': '22',
 'Form_Field_DateCreated': datetime.datetime(2020, 4, 23, 19, 22, 30, tzinfo=<StaticTzInfo 'GMT'>),
 'Form_Field_OrganisationID': <Organisation: Some Local Authoristy>,
 'Form_Field_User_ID': <Actor_User: me@me.com>}
form    
<IntStartDeliveryPhase bound=True, valid=True, fields=(Form_Field_OrganisationID;Form_Field_DateCreated;Form_Field_CamundaInstanceID;Form_Field_Camunda_HRef;Form_Field_Camunda_TenantID;Form_Field_User_ID;Form_Field_Business_Key)>
headers 
{'Content-Type': 'application/json'}
kwargs  
{}
payload 
{'businessKey': '1qaz',
 'variables': [{'Organisation': [{'type': 'String',
                                  'value': <Organisation: Some Local Authoristy>}]},
               [{'Startedby': [{'type': 'String',
                                'value': <Actor_User: me@me.com>}]}]]}
request 
<WSGIRequest: POST '/bimProcess/'>
response    
<Response [400]>
self    
<bimProcess.views.StartProcessView object at 0x055B7898>
url 
'http://localhost:8080/engine-rest/process-definition/key/Process_B_PerProject/start'

Как получить правильный формат в соответствии с требованиями camunda, в который я могу вставить свои переменные с необходимыми двойными кавычками

РЕДАКТИРОВАТЬ Yay - я наконец-то получил правильную последовательность !!!!

 def post(self,request, *args, **kwargs):      
    form = IntStartDeliveryPhase(request.POST or None)
    if form.is_valid():

        data = form.cleaned_data
        OrganisationID = str(data['Form_Field_OrganisationID'])
        UserID = str(data['Form_Field_User_ID'])
        BusinessKey = data['Form_Field_Business_Key']
        url = "http://localhost:8080/engine-rest/process-definition/key/Process_B_PerProject/start"
        payload =  {"businessKey":BusinessKey,"variables":{"Organisation":{"value":OrganisationID, "type":"String"},"Startedby":{"value":UserID,"type":"String"}}}
        headers = {
        'Content-Type': 'application/json'
        }
        payload2 = json.dumps(payload)
        print (payload2)

        response = requests.request("POST", url, headers=headers, data=payload2)
        #print(repsonse.errors)
        print(response.text.encode('utf8'))
        return render(request)    
    else:
        return render(request,self.template_name,{'form':form})

Теперь по следующим вопросам:

1) Я получаю ответ от Камунда как 200: полезная нагрузка обратно из почтового запроса должна go вернуться в данные формы, где она может быть сохранена без вмешательства пользователя.

2) Я делаю пост-сам в этой форме - каков наилучший способ достижения последовательности? я должен сделать перенаправление и передать данные или есть более эффективный способ? Кроме того, есть ли лучший способ достичь view.py, чем я написал, который является более эффективным?

1 Ответ

0 голосов
/ 01 мая 2020

def post (self, request, * args, ** kwargs):
form = IntStartDeliveryPhase (request.POST или None), если form.is_valid ():

    data = form.cleaned_data
    OrganisationID = str(data['Form_Field_OrganisationID'])
    UserID = str(data['Form_Field_User_ID'])
    BusinessKey = data['Form_Field_Business_Key']
    url = "http://localhost:8080/engine-rest/process-definition/key/Process_B_PerProject/start"
    payload =  {"businessKey":BusinessKey,"variables":{"Organisation":{"value":OrganisationID, "type":"String"},"Startedby":{"value":UserID,"type":"String"}}}
    headers = {
    'Content-Type': 'application/json'
    }
    payload2 = json.dumps(payload)
    print (payload2)

    response = requests.request("POST", url, headers=headers, data=payload2)
    #print(repsonse.errors)
    print(response.text.encode('utf8'))
    return render(request)    
else:
    return render(request,self.template_name,{'form':form})
...