{"id":317,"date":"2015-11-29T17:27:07","date_gmt":"2015-11-29T15:27:07","guid":{"rendered":"https:\/\/moijari.com\/?p=317"},"modified":"2016-12-29T22:09:21","modified_gmt":"2016-12-29T20:09:21","slug":"prosessit-jatkoa-2","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=317","title":{"rendered":"Prosessit jatkoa"},"content":{"rendered":"<p>Kaikki oikeudet tietenkin pid\u00e4tet\u00e4\u00e4n. Viimeinen versio ohjelmasta l\u00f6ytyy seuraavasta linkist\u00e4: <a href=\"https:\/\/moijari.com:5002\">moijari.com:5002<\/a><\/p>\n<p>Olen lis\u00e4nnyt koodia save rutiiniin. Save rutiinin teht\u00e4v\u00e4 on tallettaa lomakkeella tehdyt muutokset. Lis\u00e4ksi save hoitaa prosessien jatkamisen, eli esimerkiksi lelusovelluksessa tilauksen toimitukseen ja laskutukseen. Save antaa my\u00f6s talletettaville tietueille avaintiedot, ja m\u00e4\u00e4rittelee vierasavainten perusteella haettavat kent\u00e4t. Save jakaa my\u00f6s tarvittaessa yhden tiedon kahdeksi (esimerkiksi tilauksessa tilataan tuotteita kahdesta varastosta, ja varastoille tehd\u00e4\u00e4n erilliset toimitukset(eli varasto on toimituksen otsaketiedoissa)).<\/p>\n<p>Voit katsoa lelusovelluksessa saven lokkaantumalla sis\u00e4\u00e4n, ja menem\u00e4ll\u00e4 tilausten k\u00e4sittelyn\u00e4yt\u00f6lle, painamalla change ja sy\u00f6tt\u00e4m\u00e4ll\u00e4 tilauksen kenttiin tietoja (esimerkiksi asiakasnumero 1000, tuotenumetot 3000,3001,3002). N\u00e4yt\u00f6n loppuun tulostuu changes if saved kappale, joka listaa muutokset, jotka lomake t\u00e4ll\u00e4 hetkell\u00e4 tekee.<\/p>\n<p>Viel\u00e4 puuttuvat ainakin<\/p>\n<ul>\n<li>Avainten arvojen haku<\/li>\n<li>T\u00e4m\u00e4n hetkisten tietojen haku<\/li>\n<li>Summausta<\/li>\n<li>Kaavat kuten &#8216;rivin summa&#8217;=&#8217;tilattu m\u00e4\u00e4r\u00e4&#8217;*&#8217;tilauksen tuotteen hinta&#8217;<\/li>\n<li>Tietojen varsinainen lis\u00e4\u00e4minen terttuun<\/li>\n<li>Tietojen kenttien oikeellisuuden tarkistus<\/li>\n<li>Ehto prosessissa eteenp\u00e4in siirtymiseen (esimerkiksi &#8217;tilauksen toimitusp\u00e4iv\u00e4&#8217;=&#8217;kuluvap\u00e4iv\u00e4&#8217; jne.)<\/li>\n<li>T\u00e4ll\u00e4 hetkell\u00e4 rivit on yhdistelty siten, ett\u00e4 otsake ja rivit on yhdistelty samalle riville, n\u00e4iden jakaminen otsake ja rivi tietueiksi.<\/li>\n<\/ul>\n<p>Avainten arvojen haku tarkoittaa esimerkiksi lelusovelluksessa tilausnumeron, toimitusnumeron haku. Tilausnumert on lelusovelluksessa 4000sta l\u00e4htien, toimitusnumerot 5000:sta alkaen.<\/p>\n<p>T\u00e4m\u00e4n hetkisten tietojen haku tarkoittaa kaikkien t\u00e4t\u00e4 tietoa koskevien tietojen hakua, aiemmat tiedot vaikuttavat tietysti tietueen tekemiin muutoksiin. Esimerkiksi tilaus on voinut aiheuttaa toimituksen, ja m\u00e4\u00e4rien muutos vaikuttaa toimituksen m\u00e4\u00e4riin, ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 lis\u00e4\u00e4 uutta toimitusta, esimerkiksi.<\/p>\n<p>Summauksesta esimerkkin\u00e4 voisi olla tilauksen laskutettu m\u00e4\u00e4r\u00e4 kentt\u00e4, johon pit\u00e4\u00e4 summata kaikki tilausrivi\u00e4 koskevien laskujen laskutettu m\u00e4\u00e4r\u00e4 kent\u00e4t.<\/p>\n<p>Muistutukseksi viel\u00e4 ohjelman pit\u00e4isi toimia mill\u00e4 tahansa tietueilla, voit keksi\u00e4 sopivat prosessit muilta toimialoilta, tai tietotarpeista.<\/p>\n<p>Lis\u00e4sin loppuun pari koodin p\u00e4tk\u00e4\u00e4. 2set elements muistuttaa paljon foreign key rutiinia.<\/p>\n<p>Koodailen t\u00e4t\u00e4 juuri, koodiin ja postiin saattaa tulla muutoksia.<\/p>\n<pre>sovellus_get_elements(char **bones2,char *bones)\r\n{\r\n int comp;\r\n char temps[1024],memberid[64];\r\n struct set *setmembers, *setm;\r\n\r\n setmembers=NULL;\r\n skk_fetch_sets(&amp;setmembers,bones,skk-&gt;first);\r\n setm=setmembers;\r\n while(setm!=NULL) {\r\n set_get_element(\"memberid\",&amp;comp,memberid,setm-&gt;data);\r\n set_add_element(bones2,memberid);\r\n setm=setm-&gt;next;\r\n }\r\n}\r\n\r\nsovellus_get_2set_elements(char **movebones, char *tosovellus, char *fromsovellus)\r\n{\r\n int c,comp,longest,rest;\r\n char temps[1024],allname[64],fromname[64],toname[64],savefromname[64],savetoname[64],value[64];\r\n char *allbones,*pab,\r\n *frombones,*pfb,\r\n *tobones,*ptb;\r\n\r\n sprintf(temps,\"'memberid'\");\r\n allbones=NULL;\r\n sovellus_get_elements(&amp;allbones,temps);\r\n fprintf(stdout,\"\\nAB: %s\",allbones);\r\n\r\n sprintf(temps,\"'sovellus'=\\\"%s\\\", 'memberid'\",fromsovellus);\r\n frombones=NULL;\r\n sovellus_get_elements(&amp;frombones,temps);\r\n fprintf(stdout,\"\\nFB: %s\",frombones);\r\n\r\n sprintf(temps,\"'sovellus'=\\\"%s\\\", 'memberid'\",tosovellus);\r\n tobones=NULL;\r\n sovellus_get_elements(&amp;tobones,temps);\r\n fprintf(stdout,\"\\nTB: %s\",tobones);\r\n\u00a0 fprintf(stdout,\"\\nCB: \",tobones);\r\n\r\n\u00a0 *movebones=NULL;\r\n\u00a0 rest=0;\r\n\u00a0 pfb=frombones;\r\n\u00a0 while(*pfb!='\\0') {\r\n\u00a0\u00a0\u00a0 set_get_next_element(fromname,&amp;comp,value,&amp;pfb);\r\n\u00a0\u00a0\u00a0 ptb=tobones;\r\n\u00a0\u00a0\u00a0 longest=0;\r\n\u00a0\u00a0\u00a0 while(*ptb!='\\0') {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 set_get_next_element(toname,&amp;comp,value,&amp;ptb);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 pab=allbones;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 while(*pab!='\\0') {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 set_get_next_element(allname,&amp;comp,value,&amp;pab);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if( (strstr(fromname,allname)!=NULL) &amp;&amp;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (strstr(toname,allname)!=NULL) ) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if((c=strlen(allname))&gt;longest) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 longest=c;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 strcpy(savefromname,fromname);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 strcpy(savetoname,toname);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 if(longest&gt;0) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 sprintf(temps,\"'%s' = '%s'\",savetoname,savefromname);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 set_add_element_noquotes(movebones,temps);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0 }\r\n\u00a0 fprintf(stdout,\"\\nCB2: %s\",*movebones);\r\n}\r\n\r\n<\/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 lis\u00e4nnyt koodia save rutiiniin. Save rutiinin teht\u00e4v\u00e4 on tallettaa lomakkeella tehdyt muutokset. Lis\u00e4ksi save hoitaa prosessien jatkamisen, eli esimerkiksi lelusovelluksessa tilauksen toimitukseen ja laskutukseen. Save antaa my\u00f6s talletettaville tietueille avaintiedot, ja m\u00e4\u00e4rittelee vierasavainten perusteella haettavat kent\u00e4t. Save jakaa my\u00f6s tarvittaessa yhden tiedon kahdeksi&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=317\">Continue reading <span class=\"screen-reader-text\">Prosessit jatkoa<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/317"}],"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=317"}],"version-history":[{"count":8,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/317\/revisions"}],"predecessor-version":[{"id":325,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/317\/revisions\/325"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}