まず、ここで行っていることから始めましょう。1つのサーバーからXMLファイルを取得し、それを別のサーバーに配置します。このサーバーには、phpコードもあります。次に、XMLデータの一部をローカルのMySQLデータベースにインポートする必要があります。XMLは、オンラインストアの注文のコピーです。注文には、その人が注文した複数のアイテムが含まれているものもあれば、1つのアイテムのみを注文した場合は含まれていないものもあります。
したがって、XMLの例では次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<xmldata>
<Orders>
<OrderID>2119</OrderID>
<AddressValidated>Y</AddressValidated>
<Affiliate_Commissionable_Value>2.0000</Affiliate_Commissionable_Value>
<AuthHash>d995fd9424fb99e80f58841a0ff2340f</AuthHash>
<AVS />
<BillingAddress1>122 27th West</BillingAddress1>
<BillingAddress2>Floor 11</BillingAddress2>
<BillingCity>New York</BillingCity>
<BillingCompanyName />
<BillingCountry>United States</BillingCountry>
<BillingFaxNumber />
<BillingFirstName>Dan</BillingFirstName>
<BillingLastName>Test</BillingLastName>
<BillingPhoneNumber>646456777</BillingPhoneNumber>
<BillingPostalCode>10001</BillingPostalCode>
<BillingState>NY</BillingState>
<CardHoldersName />
<CC_Last4 />
<CreditCardAuthorizationDate>3/30/2012 11:52:00 AM</CreditCardAuthorizationDate>
<CreditCardAuthorizationNumber>MANUAL</CreditCardAuthorizationNumber>
<CreditCardTransactionID />
<Customer_IPAddress>184.56.49.45</Customer_IPAddress>
<CustomerID>19</CustomerID>
<CVV2_Response />
<GiftWrapNote />
<IsAGift>N</IsAGift>
<LastModBy>7</LastModBy>
<LastModified>3/30/2012 1:39:00 PM</LastModified>
<Locked>Y</Locked>
<Order_Comments>Test sale - Don't process
Ignore statuses on this order</Order_Comments>
<Order_Entry_System>PHONE</Order_Entry_System>
<OrderDate>3/30/2012 11:01:00 AM</OrderDate>
<OrderNotes />
<OrderStatus>Ready to Ship</OrderStatus>
<PaymentAmount>8.1600</PaymentAmount>
<PaymentMethodID>17</PaymentMethodID>
<PONum />
<Processed_AutoEvents>Y</Processed_AutoEvents>
<SalesRep_CustomerID>7</SalesRep_CustomerID>
<SalesTax1>0.1700</SalesTax1>
<SalesTax2>0.0000</SalesTax2>
<SalesTax3>0.0000</SalesTax3>
<SalesTaxRate>0</SalesTaxRate>
<SalesTaxRate1>0.08375</SalesTaxRate1>
<SalesTaxRate2>0</SalesTaxRate2>
<SalesTaxRate3>0</SalesTaxRate3>
<ShipAddress1>123 27th West</ShipAddress1>
<ShipAddress2>Floor 1</ShipAddress2>
<ShipCity>New York</ShipCity>
<ShipCompanyName />
<ShipCountry>United States</ShipCountry>
<ShipFaxNumber />
<ShipFirstName>Dan</ShipFirstName>
<ShipLastName>Test</ShipLastName>
<ShipPhoneNumber>646782342</ShipPhoneNumber>
<Shipping_Locked>Y</Shipping_Locked>
<ShippingMethodID>1</ShippingMethodID>
<ShipPostalCode>10001</ShipPostalCode>
<ShipResidential>Y</ShipResidential>
<ShipState>NY</ShipState>
<Stock_Priority>3</Stock_Priority>
<Tax1_IgnoreNoTaxRules />
<Tax1_Title>Tax (8.375%)</Tax1_Title>
<Tax2_IgnoreNoTaxRules />
<Tax2_IncludePrevious>0</Tax2_IncludePrevious>
<Tax2_Title />
<Tax3_IgnoreNoTaxRules />
<Tax3_IncludePrevious>0</Tax3_IncludePrevious>
<Tax3_Title />
<Total_Payment_Authorized>0.0000</Total_Payment_Authorized>
<Total_Payment_Received>7.0700</Total_Payment_Received>
<TotalShippingCost>5.9900</TotalShippingCost>
<VendorID>0</VendorID>
<OrderDetails>
<OrderDetailID>3374</OrderDetailID>
<AutoDropShip>Y</AutoDropShip>
<FreeShippingItem>Y</FreeShippingItem>
<GiftTrakNumber>0</GiftTrakNumber>
<GiftWrap />
<GiftWrapCost>0.0000</GiftWrapCost>
<GiftWrapNote />
<IsKitID />
<KitID />
<Locked>Y</Locked>
<OnOrder_Qty>0</OnOrder_Qty>
<OptionIDs />
<Options />
<OrderID>2119</OrderID>
<ProductCode>test-product</ProductCode>
<ProductID>39200</ProductID>
<ProductName>Test Product 1</ProductName>
<ProductNote />
<ProductPrice>1.0000</ProductPrice>
<ProductWeight>1</ProductWeight>
<QtyOnBackOrder>0</QtyOnBackOrder>
<QtyOnHold>1</QtyOnHold>
<QtyShipped>0</QtyShipped>
<Quantity>1</Quantity>
<TaxableProduct>Y</TaxableProduct>
<TotalPrice>1.0000</TotalPrice>
<Vendor_Price>0.0000</Vendor_Price>
<Warehouses />
</OrderDetails>
<OrderDetails>
<OrderDetailID>3386</OrderDetailID>
<AutoDropShip />
<FreeShippingItem>Y</FreeShippingItem>
<GiftTrakNumber>0</GiftTrakNumber>
<GiftWrap />
<GiftWrapCost>0.0000</GiftWrapCost>
<GiftWrapNote />
<Locked>Y</Locked>
<OnOrder_Qty>0</OnOrder_Qty>
<Options />
<OrderID>2119</OrderID>
<ProductCode>test-product</ProductCode>
<ProductID>39200</ProductID>
<ProductName>Test Product 2</ProductName>
<ProductNote />
<ProductPrice>1.0000</ProductPrice>
<ProductWeight>1</ProductWeight>
<QtyOnBackOrder>0</QtyOnBackOrder>
<QtyOnHold>1</QtyOnHold>
<QtyShipped>0</QtyShipped>
<Quantity>1</Quantity>
<TaxableProduct>Y</TaxableProduct>
<TotalPrice>1.0000</TotalPrice>
</OrderDetails>
</Orders>
<Orders>
<OrderID>2141</OrderID>
<AddressValidated>Y</AddressValidated>
<Affiliate_Commissionable_Value>1.0000</Affiliate_Commissionable_Value>
<AuthHash>14cca8be8db44ca9943f0a6cbf592c83</AuthHash>
<AVS />
<BillingAddress1>122 27th West2</BillingAddress1>
<BillingAddress2 />
<BillingCity>New York2</BillingCity>
<BillingCompanyName />
<BillingCountry>United States</BillingCountry>
<BillingFaxNumber />
<BillingFirstName>Dan2</BillingFirstName>
<BillingLastName>Test2</BillingLastName>
<BillingPhoneNumber>646346322</BillingPhoneNumber>
<BillingPostalCode>10002</BillingPostalCode>
<BillingState>NY</BillingState>
<CardHoldersName />
<CC_Last4 />
<CreditCardAuthorizationDate>3/30/2012 3:33:00 PM</CreditCardAuthorizationDate>
<CreditCardAuthorizationNumber>MANUAL</CreditCardAuthorizationNumber>
<CreditCardTransactionID />
<Customer_IPAddress>56.75.23.34</Customer_IPAddress>
<CustomerID>19</CustomerID>
<CVV2_Response />
<GiftWrapNote />
<IsAGift>N</IsAGift>
<LastModBy>7</LastModBy>
<LastModified>3/30/2012 3:33:00 PM</LastModified>
<Locked>Y</Locked>
<Order_Comments>Test sale #2, don't process, ignore status.</Order_Comments>
<Order_Entry_System>PHONE</Order_Entry_System>
<OrderDate>3/30/2012 3:32:00 PM</OrderDate>
<OrderNotes />
<OrderStatus>Ready to Ship</OrderStatus>
<PaymentAmount>7.0700</PaymentAmount>
<PaymentMethodID>17</PaymentMethodID>
<PONum />
<Processed_AutoEvents>Y</Processed_AutoEvents>
<SalesRep_CustomerID>7</SalesRep_CustomerID>
<SalesTax1>0.0800</SalesTax1>
<SalesTax2>0.0000</SalesTax2>
<SalesTax3>0.0000</SalesTax3>
<SalesTaxRate>0</SalesTaxRate>
<SalesTaxRate1>0.08375</SalesTaxRate1>
<SalesTaxRate2>0</SalesTaxRate2>
<SalesTaxRate3>0</SalesTaxRate3>
<ShipAddress1>123 27th West2</ShipAddress1>
<ShipAddress2 />
<ShipCity>New York2</ShipCity>
<ShipCompanyName />
<ShipCountry>United States</ShipCountry>
<ShipFaxNumber />
<ShipFirstName>Dan2</ShipFirstName>
<ShipLastName>Test2</ShipLastName>
<ShipPhoneNumber>6461234789</ShipPhoneNumber>
<Shipping_Locked>Y</Shipping_Locked>
<ShippingMethodID>1</ShippingMethodID>
<ShipPostalCode>10002</ShipPostalCode>
<ShipResidential>Y</ShipResidential>
<ShipState>NY</ShipState>
<Stock_Priority>3</Stock_Priority>
<Tax1_IgnoreNoTaxRules />
<Tax1_Title>Tax (8.375%)</Tax1_Title>
<Tax2_IgnoreNoTaxRules />
<Tax2_IncludePrevious>0</Tax2_IncludePrevious>
<Tax2_Title />
<Tax3_IgnoreNoTaxRules />
<Tax3_IncludePrevious>0</Tax3_IncludePrevious>
<Tax3_Title />
<Total_Payment_Authorized>0.0000</Total_Payment_Authorized>
<Total_Payment_Received>7.0700</Total_Payment_Received>
<TotalShippingCost>5.9900</TotalShippingCost>
<VendorID>0</VendorID>
<OrderDetails>
<OrderDetailID>3404</OrderDetailID>
<AutoDropShip>Y</AutoDropShip>
<FreeShippingItem>Y</FreeShippingItem>
<GiftTrakNumber>0</GiftTrakNumber>
<GiftWrap />
<GiftWrapCost>0.0000</GiftWrapCost>
<GiftWrapNote />
<IsKitID />
<KitID />
<Locked>Y</Locked>
<OnOrder_Qty>0</OnOrder_Qty>
<OptionIDs />
<Options />
<OrderID>2141</OrderID>
<ProductCode>test-product</ProductCode>
<ProductID>39200</ProductID>
<ProductName>Test Product</ProductName>
<ProductNote />
<ProductPrice>1.0000</ProductPrice>
<ProductWeight>1</ProductWeight>
<QtyOnBackOrder>0</QtyOnBackOrder>
<QtyOnHold>1</QtyOnHold>
<QtyShipped>0</QtyShipped>
<Quantity>1</Quantity>
<TaxableProduct>Y</TaxableProduct>
<TotalPrice>1.0000</TotalPrice>
<Vendor_Price>0.0000</Vendor_Price>
<Warehouses />
</OrderDetails>
</Orders>
</xmldata>
ご覧のとおり、最初の注文には2つ含まれていますが<OrderDetails>
、2番目の注文には1つしか含まれていません。
これまでに4つの関数を作成して、非常に親密にしています。
processxml();
processxmldetails();
vl_readytoship_download();
csvimport();
1つ目は、他のサーバーから.xmlファイルをインポートして、作業を開始できるようにします。
function vl_readytoship_download() {
echo "Downloading Ready To Ship Orders...<br>";
$ch = curl_init("http://www.link.to/vl_rts.xml");
$fh = fopen("vl_rts.xml", "w");
curl_setopt($ch, CURLOPT_FILE, $fh);
curl_exec($ch);
curl_close($ch);
}
2番目の関数はXMLをCSVに変換するので、インポートのために読みやすくなります(この手順は必須ではないか、最適な方法である可能性があります。そのため、ここにいますが、機能します)。
function processxml() {
vl_readytoship_download();
echo "Processing Ready To Ship Orders...<br>";
$filexml='vl_rts.xml';
if (file_exists($filexml)) {
$xml = simplexml_load_file($filexml);
$f = fopen('vl_rts.csv', 'w');
foreach ($xml->Orders as $Orders) {
fputcsv($f, get_object_vars($Orders),',','"');
}
fclose($f);
}
}
<OrderDetails>
今では、CSVにタグのデータが含まれていないことに最初は気づきませんでした。MySQL関数へのインポートで作業を始めたときに初めて気づきました。
したがって、後戻りする代わりに、<Order>
少なくともデータをインポートするために前に進みました。
function csvimport() {
if(!file_exists("vl_rts.csv")) { echo "WARNING! CSV Not Found!<br>"; exit; }
$row = 0;
$mycsvfile = array();
if (($handle = fopen("vl_rts.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
}
$mycsvfile[] = $data; //add the row to the main array.
}
fclose($handle);
}
echo "<br>Reading Rows:<br>";
//[row][column] so [1][$csvrow] = 2nd row, first column since 0=1
$csvrow = 0;
while ($mycsvfile[$csvrow][0] != $null) {
$query = mysql_query("SELECT * from vtiger_purchaseorder WHERE orderid=" . $mycsvfile[$csvrow][0]) or die(mysql_error());
if(mysql_num_rows($query)!=0)
{
//if row exists
$csvrow++;
echo "Row exists, changing rows...<br>";
echo "DO SOMETHING HERE, ANYTHING BUT THIS<br>"; //This is a "todo" spot for later
}
else //if row doesn't exist
{
$currentdate = date('Y-m-d');
$orderid = $mycsvfile[$csvrow][0];
$subject = "Uploading..."; //This is set to Uploading... now, in another function we'll come back change the subject to the name of the item sold.
$quoteid = $mycsvfile[$csvrow][0];
if ($mycsvfile[$csvrow][72] == 0) {
$vendorid = "1500"; //right now, new orders go into a temp vendor of 1500, then we'll change it based on the product ordered to see which vendor it should be assigned to.
echo "Vendor is " . $vendorid . "<br>";
$shipcity = "Shipcity"; This info is in <OrderDetails> which we don't have yet.
//This other database is vtiger, which has a lot of different area where it needs to store data, so here we insert it in a way vtiger can accept it.
$query1 = "SELECT * from vtiger_crmentity";
$query2 = "INSERT INTO vtiger_crmentity (smcreatorid,smownerid,modifiedby,setype,orderid) VALUES('1','1','1','PurchaseOrder','" . $orderid . "')";
$result1 = mysql_query($query1);
echo mysql_error() . "<br>";
$result2 = mysql_query($query2);
$crmid = mysql_insert_id();
$query3 = "SELECT * from vtiger_purchaseorder";
$query4 = "INSERT INTO vtiger_purchaseorder (purchaseorderid,subject,quoteid,vendorid,duedate,orderid) VALUES(" . $crmid . ",'" . $subject . "','" . $quoteid . "','" . $vendorid . "','" . $currentdate . "','" . $orderid . "')";
$query5 = "SELECT * from vtiger_poshipads";
$query6 = "INSERT INTO vtiger_poshipads (poshipaddressid,ship_city,orderid) VALUES(" . $crmid . ",'" . $shipcity . "','" . $orderid . "')";
echo mysql_error() . "<br>";
$result3 = mysql_query($query3);
echo mysql_error() . "<br>";
$result4 = mysql_query($query4);
echo mysql_error() . "<br>";
$result5 = mysql_query($query5);
echo mysql_error() . "<br>";
$result6 = mysql_query($query6);
echo mysql_error() . "<br>";
echo "CRMID " . $crmid . "<br>";
$csvrow++;
echo "Order doesn't exist, inserting order number " . $orderid . " from CSV row " . $csvrow . "<br>";
//CHANGE ORDER FROM READY TO SHIP TO PENDING SHIPMENT ON OTHER SITE (to do)
}
}
}
echo "Import Complete.<br>";
}
ここで簡単に要約します。そのため、他のサーバーから.XMLファイルを取得しました。すべて(すべての子を除く)を<Orders>
取得してCSVに挿入し、CSVデータを取得してMySQL DBに挿入して、新しい発注書を作成しました。
新しい発注書はありますが、<OrderDetails>
タグからのデータがありません。
すべての<OrderDetails>
データを配列に配置しようとしましたが、最初のタグにある最初の2つのタグしか取得できません<Order>
。
<OrderDetails>
理想的には、すべてのタグを抽出して、別のCSVファイルに挿入したいと思います。そこから、上記と同じ方法で引っ張って挿入します。これを試しましたが、CSVがオフになっていて、行が整列しておらず、最初の2つのタグしか取得できず、すべてではありません。
私は何でも開いているので、私に知らせてください...