{"id":209,"date":"2014-11-19T13:33:55","date_gmt":"2014-11-19T11:33:55","guid":{"rendered":"https:\/\/moijari.com\/?p=209"},"modified":"2019-11-22T17:01:22","modified_gmt":"2019-11-22T15:01:22","slug":"lahde-tietovirta","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=209","title":{"rendered":"L\u00e4hde tietovirta"},"content":{"rendered":"<p>Kaikki oikeudet tietenkin pid\u00e4tet\u00e4\u00e4n.<\/p>\n<p>Viimeinen versio ohjelmasta l\u00f6ytyy seuraavasta linkist\u00e4: <a href=\"https:\/\/moijari.com:5002\">moijari.com:5002<\/a><\/p>\n<p>Olen v\u00e4lill\u00e4 miettinyt ohjelman sorsien julkaisua, ja ajattelinkin taas julkaista pienen p\u00e4tk\u00e4n, jonka kirjoitin sunnuntaina. Se tekee vierasavainten k\u00e4sittelyn. Esimerkiksi tilauksessa on tietoja jotka haetaan toisista sovelluksista esimerkiksi asiakas ja tuote. Ohjelman p\u00e4tk\u00e4 p\u00e4\u00e4ttelee mitk\u00e4 kent\u00e4t pit\u00e4\u00e4 hakea ja sijoittaa ne sovelluksen kenttiin. L\u00f6ytyi (m\u00e4ts\u00e4\u00e4 tasan yht\u00e4 tietuetta) rutiinista puuttuu viel\u00e4 jotain..<\/p>\n<p>T\u00e4t\u00e4 ei voi viel\u00e4 kokeilla lelusovelluksessa, sen html osuus kaipaa pikku muutoksia. Seuraavana ovat nuo html osuudet ja sitten output tietovirrat.<\/p>\n<p>Huomasin sisennyksi\u00e4 tehdess\u00e4ni, ett\u00e4 ohjelmassa on ainakin yksi bugia, voit harjoitukseksi etsi\u00e4 sen\/ne. En alkanut korjata niit\u00e4 lennossa, se ei kuitenkaan olisi mennyt oikein.<\/p>\n<p>Ihan lopussa viel\u00e4 nuo l\u00f6ytyi fprint\u00e4ff\u00e4t:<\/p>\n<pre>\/* (C)1998-2014 Jari Kuivaniemi, All rights reserved! *\/\r\nif(setuser!=NULL) { \/* N\u00e4yt\u00f6ll\u00e4 kentti\u00e4 *\/\r\n  char kentta[64],kentta2[64],kentta3[64],kentta4[64];\r\n  char savekentta2[64],savekentta3[64],savekentta4[64];\r\n  char value[128];\r\n  int c,longest;\r\n  char *bones,*bones2;\r\n  struct set *setinputdata,*sid;\r\n\r\n  setallfields=NULL;\r\n\r\n  \/* Haetaan kaikki tertussa olevat kent\u00e4t *\/\r\n  skk_fetch2(&amp;setallfields,\"'memberid'\",skk);\r\n  sprintf(temps,\"'sovellus', 'fromsovellus', 'tosovellus'=\\\"%s\\\"\",sovellus);\r\n  skk_fetch2(&amp;setflow,temps,skk); \/* Haetaan kaikki t\u00e4t\u00e4 sovellusta koskevat virrat *\/\r\n  setf=setflow;\r\n\r\n  while(setf!=NULL) { \/* Selataan kaikki virrat *\/\r\n\r\n \/* Haetaan sovelluksen nimi, l\u00e4hdesovellus ja kohdesovellus *\/\r\n\r\n    set_get_element(\"sovellus\",&amp;comp,sovellusname,setf-&gt;data);\r\n    set_get_element(\"fromsovellus\",&amp;comp,fromsovellusname,setf-&gt;data);\r\n    set_get_element(\"tosovellus\",&amp;comp,tosovellusname,setf-&gt;data);\r\n\r\n    \/* Jos t\u00e4m\u00e4 sovellus on kohdesovelluksena (t\u00e4m\u00e4n input) *\/\r\n    if(!strcmp(tosovellusname,sovellus)) {\r\n      \/* Haetaan l\u00e4hdesovelluksen kent\u00e4t *\/\r\n      sprintf(temps,\"'sovellus'=\\\"%s\\\", 'memberid'\",fromsovellusname);\r\n      skk_fetch2(&amp;setfromfields,temps,skk);\r\n\r\n      \/* Haetaan l\u00e4hdesovelluksen kent\u00e4t *\/\r\n      sprintf(temps,\"'sovellus'=\\\"%s\\\", 'memberid'\",tosovellusname);\r\n      skk_fetch2(&amp;settofields,temps,skk);\r\n\r\n      setff=setfromfields;\r\n      bones=NULL;\r\n      first=0;\r\n      while(setff!=NULL) { \/* K\u00e4yd\u00e4\u00e4n l\u00e4pi from kent\u00e4t *\/\r\n        \/* Haetaan kent\u00e4n nimi *\/\r\n        set_get_element(\"memberid\",&amp;comp,kentta2,setff-&gt;data);\r\n        longest=0; \/* Haetaan pisint\u00e4 yhteist\u00e4 osaa, joka on tertun kentiss\u00e4 *\/\r\n        savekentta2[0]='\\0';\r\n        savekentta3[0]='\\0';\r\n        settf=settofields;\r\n        while(settf!=NULL) { \/* Haetaan l\u00e4pi to kent\u00e4t *\/\r\n          set_get_element(\"memberid\",&amp;comp,kentta3,settf-&gt;data);\r\n          setaf=setallfields;\r\n          while(setaf!=NULL) { \/* K\u00e4yd\u00e4\u00e4n l\u00e4pi kaikki kent\u00e4t *\/\r\n            set_get_element(\"memberid\",&amp;comp,kentta4,setaf-&gt;data);\r\n            \/* Jos to kentt\u00e4 ja from kentt\u00e4 m\u00e4ts\u00e4\u00e4v\u00e4t samaan tertun\r\n             * kentt\u00e4\u00e4n, etsit\u00e4\u00e4n pisin m\u00e4ts\u00e4\u00e4v\u00e4.\r\n             *\/\r\n            if( (strstr(kentta2,kentta4)!=NULL) &amp;&amp; \/* from *\/\r\n              (strstr(kentta3,kentta4)!=NULL) ) { \/* to field *\/\r\n              if((c=strlen(kentta3))&gt;longest) {\r\n                longest=c;\r\n                strcpy(savekentta3,kentta3);\r\n                strcpy(savekentta4,kentta4);\r\n              }\r\n            }\r\n            setaf=setaf-&gt;next; \/* Seuraava tertun kentt\u00e4 *\/\r\n          }\r\n          settf=settf-&gt;next; \/* Seuraava to kentt\u00e4 *\/\r\n        }\r\n        if(longest&gt;0) { \/* Jos l\u00f6ytyi talletetaan kentt\u00e4pari *\/\r\n          sprintf(temps,\"'%s'='%s'\",savekentta3,kentta2);\r\n          set_add_element_noquotes(&amp;bones,temps);\r\n        }\r\n        setff=setff-&gt;next; \/* Seuraava from field *\/\r\n      }\r\n\r\n      if(setfromfields!=NULL)\r\n        set_free(setfromfields);\r\n        setfromfields=NULL;\r\n        if(settofields!=NULL)\r\n          set_free(settofields);\r\n        settofields=NULL;\r\n\r\n      setu=setuser; \/* JariK 20141116 *\/\r\n      while(setu!=NULL) {\r\n        bones2=NULL;\r\n\r\n        p=bones;\r\n        while(*p!='\\0') {\r\n          set_get_next_equals(kentta,kentta2,&amp;p);\r\n          set_get_element(kentta,&amp;comp,value,setu-&gt;data);\r\n          if(value[0]!='\\0')\r\n            sprintf(temps,\"'%s' = \\\"%s\\\"\",kentta2,value);\r\n          else\r\n            sprintf(temps,\"'%s'\",kentta2,value);\r\n\r\n          set_add_element_noquotes(&amp;bones2,temps);\r\n        }\r\n\r\n        setinputdata=NULL;\r\n        skk_fetch2(&amp;setinputdata,bones2,skk);\r\n\r\n         c=0;\r\n         sid=setinputdata;\r\n         while(sid!=NULL) {\r\n           c++;\r\n         sid=sid-&gt;next;\r\n       }\r\n\r\n       if(c==1) {\r\n         fprintf(stdout,\"*** L\u00d6YTYI ***\\n\");\r\n         fprintf(stdout,\"bo[%s]b\\n\",bones);\r\n         fprintf(stdout,\"b2[%s]b\\n\",bones2);\r\n         fprintf(stdout,\"fo[%s]\\n\",setinputdata-&gt;data);\r\n         fprintf(stdout,\"da[%s]\\n\",setu-&gt;data);\r\n       }\r\n\r\n       if(setinputdata!=NULL)\r\n         free(setinputdata);\r\n       setinputdata=NULL;\r\n       if(bones2!=NULL)\r\n         free(bones2);\r\n       bones2=NULL;\r\n\r\n       setu=setu-&gt;next;\r\n     }\r\n     if(bones!=NULL)\r\n       free(bones);\r\n     bones=NULL;\r\n   }\r\n   setf=setf-&gt;next;\r\n }\r\n if(setallfields!=NULL)\r\n set_free(setallfields);\r\n setallfields=NULL;\r\n\r\n*** L\u00d6YTYI ***\r\nbo['tilauksen asiakkaan nimi'='asiakkaan nimi', 'tilauksen asiakasnumero'='asiakasnumero']b\r\nb2['asiakkaan nimi', 'asiakasnumero' = \"1000\"]b\r\nfo['asiakkaan nimi'=\"Vene Oy\", 'asiakasnumero'=\"1000\"]\r\nda['tilauksen asiakasnumero'=\"1000\", 'tilauksen asiakkaan nimi'=\"\", 'tilausnumero'=\"\", 'tilausp\u00e4iv\u00e4'=\"\", 'tilauksen summa'=\"\"]\r\n*** L\u00d6YTYI ***\r\nbo['tilauksen tuotenumero'='tuotenumero', 'tilauksen tuotteen nimi'='tuotteen nimi', 'tilauksen tuotteen hinta'='tuotteen hinta']b\r\nb2['tuotenumero' = \"3000\", 'tuotteen nimi', 'tuotteen hinta']b\r\nfo['tuotenumero'=\"3000\", 'tuotteen nimi'=\"Soutuvene\", 'tuotteen hinta'=\"500\"]\r\nda['rivin summa'=\"\", 'tilattu m\u00e4\u00e4r\u00e4'=\"\", 'tilauksen tuotenumero'=\"3000\", 'tilauksen tuotteen hinta'=\"\", 'tilauksen tuotteen nimi'=\"\", 'tilausnumero'=\"\", 'tilausrivin numero'=\"\"]<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Kaikki oikeudet tietenkin pid\u00e4tet\u00e4\u00e4n. Viimeinen versio ohjelmasta l\u00f6ytyy seuraavasta linkist\u00e4: moijari.com:5002 Olen v\u00e4lill\u00e4 miettinyt ohjelman sorsien julkaisua, ja ajattelinkin taas julkaista pienen p\u00e4tk\u00e4n, jonka kirjoitin sunnuntaina. Se tekee vierasavainten k\u00e4sittelyn. Esimerkiksi tilauksessa on tietoja jotka haetaan toisista sovelluksista esimerkiksi asiakas ja tuote. Ohjelman p\u00e4tk\u00e4 p\u00e4\u00e4ttelee mitk\u00e4 kent\u00e4t pit\u00e4\u00e4 hakea ja sijoittaa ne sovelluksen kenttiin. L\u00f6ytyi&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=209\">Continue reading <span class=\"screen-reader-text\">L\u00e4hde tietovirta<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/209"}],"collection":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=209"}],"version-history":[{"count":12,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/209\/revisions"}],"predecessor-version":[{"id":254,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/209\/revisions\/254"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}