2017-10-20 5 views
0

J'ai ce bloc de code qui construit une pièce jointe de message et/ou une table pour la réponse d'une commande de barre oblique;La commande de barre oblique la plus à la pièce en tant que pièce jointe

$attachments = array(); 
if (!count($whereClause)) { 
    $data .= "**Can Not Build Query**\n"; 
} 
else { 
    if ($data = $db->getResult($sql)) { 
     $table = "| PRC | Part Number | BIN | WH | Last Edit | Quotes | Last Quoted | Orders | Units Sold | Total Sales | Last Sold |\n"; 
     $table .= "|----:|----------:|----:|----:|--------:|----:|----:|----:|----:|----:|----:|----:|\n"; 

     foreach ($data as $part => $value) { 
      $res_prc = $value['PRC']; 
      $res_pn = trim($value['Part_Number']); 
      $res_bin = $value['Bin']; 
      $res_wh = $value['WH'] ?: 'N/A'; 

      if (isset($value['Last_Edit'])) { 
       $res_le = date_format(date_create($value['Last_Edit']), 'm/d/Y'); 
      } 
      else { 
       $resl_le = 'N/A'; 
      } 

      if (isset($value['By'])) { 
       $res_le = $value['By']." @ $res_le"; 
      } 

      $res_qts = $value['Quotes'] ?: 'N/A'; 

      if (isset($value['Last_Quoted'])) { 
       $res_lq = date_format(date_create($value['Last_Quoted']), 'm/d/Y'); 
      } 
      else { 
       $res_lq = 'N/A'; 
      } 

      $res_odr = $value['Orders'] ?: 'N/A'; 
      $res_us = $value['Units_Sold'] ?: 'N/A'; 
      $res_ts = $value['Total_Sales'] ?: 'N/A'; 

      if (isset($value['Last_Sold'])) { 
       $res_ls = date_format(date_create($value['Last_Sold']), 'm/d/Y'); 
      } 
      else { 
       $res_ls = 'N/A'; 
      } 

      $attachment = array(
       "fallback" => "PRC: $res_prc Part Number: $res_pn Location: $res_bin", 
       "text" => "PRC: $res_prc Part Number: $res_pn Location: $res_bin", 
       "color" => "#3fdbbc", 
       "author_name" => "PRC: $res_prc Part Number: $res_pn", 
       "title" => "$res_bin", 
       "title_link" => "http://http://devbox/vrf/binlist.php?binLoc=$res_bin", 
       "title" => "$res_bin", 
       "fields" => array() 
      ); 

      $warehouse = array(
       "short" => "true", 
       "title" => "Warehouse", 
       "value" => "$res_wh" 
      ); 
      array_push($attachment['fields'], $warehouse); 

      $last_edit = array(
       "short" => "true", 
       "title" => "Last Edit", 
       "value" => "$res_le" 
      ); 
      array_push($attachment['fields'], $last_edit); 

      $table .= "|$res_prc|$res_pn|$res_bin|$res_wh|$res_le|$res_qts|$res_lq|$res_odr|$res_us|$res_ts|$res_ls|\n"; 
      array_push($attachments, $attachment); 
     } 
     $attachments = json_encode($attachments); 
    } 
    else { 
     if ($db->lastError) { 
      $data = "Error {$db->lastError} in:\n$sql"; 
     } 
     else { 
      $data .= " __No results__ \n"; 
     } 
     $table = $data; 
    } 
} 

$response = array(
    'response_type' => 'ephemeral', 
    // 'text' => "$table", 
    'username' => "Woodhouse", 
    'icon_url' => 'http://linux3/mc-dev/img/woodhouse.png', 
    'attachments' => "$attachments", 
); 
header('Content-type: application/json'); 
echo json_encode($response); 

Si j'utilise le code tout comme les journaux mattermost et les rapports que la commande slash a renvoyé une réponse vide. Si je décommente le nœud de texte dans le tableau de réponse, j'obtiens une table comme prévu. Si je supprime la variable $table du noeud de texte dans le tableau de réponses et le remplace par la variable $attachment, les éléments suivants sont imprimés dans la réponse à l'intérieur de mattermost;

[ 
    { 
     "fallback": "PRC: TI Part Number: MC1489N Location: GG-68-06", 
     "text": "PRC: TI Part Number: MC1489N Location: GG-68-06", 
     "color": "#3fdbbc", 
     "author_name": "PRC: TI Part Number: MC1489N", 
     "title": "GG-68-06", 
     "title_link": "http://http://devbox/vrf/binlist.php?binLoc=GG-68-06", 
     "fields": [ 
      { 
       "short": "true", 
       "title": "Warehouse", 
       "value": "W1" 
      }, 
      { 
       "short": "true", 
       "title": "Last Edit", 
       "value": "jlapera @ 09/11/2006" 
      } 
     ] 
    } 
] 

Ce qui serait attendu puisque ce sont les données qui sont assemblées pour la pièce jointe. En outre, j'ai commenté la définition du type de contenu avant de répercuter la réponse et j'obtiens le JSON de la charge utile entière comme une réponse lorsque la commande est exécutée.

Est-ce que je manque quelque chose dans mon formatage? ou quelque chose?

Répondre

1

Je ne suis pas particulièrement familier avec PHP, mais il semble que vous envoyez le champ des pièces jointes sous la forme d'une chaîne au lieu d'un tableau d'objets puisque vous avez 'attachments' => "$attachments" là. La charge utile finale de JSON pour la réponse devrait ressembler à quelque chose comme

{ 
    "response_type": "ephemeral", 
    "text": "<text>", 
    "username": "Woodhouse", 
    "icon_url": "http://linux3/mc-dev/img/woodhouse.png", 
    "attachments": [ 
     { 
      "text": "<attachment text>" 
     } 
    ] 
}