From 29dec92a3723c43c2a6cf7b895b268b27aa25f74 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Mon, 29 Aug 2016 18:18:34 -0400 Subject: [PATCH] HOR-1727 "Dynaform > No renderiza con un dropdown con query de una DBConnection" SOLVED Issue: Dynaform > No renderiza con un dropdown con query de una DBConnection Queries lentos BD - Slow query Cause: json_encode retorna FALSE Solution: Se procesa el dato booleano (false); el mismo tambien es registrado en el log de errores (processmaker.log) --- workflow/engine/classes/class.pmDynaform.php | 52 ++++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index 5bbf5ec89..7b77d3c70 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -685,7 +685,7 @@ class pmDynaform window.dynaform = new PMDynaform.core.Project({ data: data, - delIndex: delIndex, + delIndex: delIndex, keys: { server: httpServerHostname, projectId: prj_uid, @@ -799,7 +799,7 @@ class pmDynaform "\n"; $javascrip = "" . ""; @@ -1662,4 +1662,50 @@ class pmDynaform throw $e; } } + + /** + * Returns a string containing the JSON representation of the object + * + * @param object $json The object being encoded + * + * @return string Returns a string + */ + public function json_encode($json) + { + $jsonData = G::json_encode($json); + + if ($jsonData === false) { + $jsonLastError = json_last_error(); + $jsonLastErrorMsg = json_last_error_msg(); + $token = time(); + + $obj = new stdClass(); + $obj->type = 'panel'; + $obj->id = '__json_encode_error__'; + $obj->content = ' +
+
+ ' . + G::LoadTranslation('ID_EXCEPTION_LOG_INTERFAZ', [$token]) . + '
'; + $obj->border = 0; + + $json->items[0]->items = [[$obj]]; + + $jsonData = G::json_encode($json); + + //Log + \Bootstrap::registerMonolog( + 'RenderDynaForm', + 400, + 'JSON encoded string error ' . $jsonLastError . ': ' . $jsonLastErrorMsg, + ['token' => $token, 'projectUid' => $this->record['PRO_UID'], 'dynaFormUid' => $this->record['DYN_UID']], + SYS_SYS, + 'processmaker.log' + ); + } + + //Return + return $jsonData; + } }