Prosessit jatkoa

Kaikki oikeudet tietenkin pidätetään. Viimeinen versio ohjelmasta löytyy seuraavasta linkistä: moijari.com:5002

Olen lisännyt koodia save rutiiniin. Save rutiinin tehtävä on tallettaa lomakkeella tehdyt muutokset. Lisäksi save hoitaa prosessien jatkamisen, eli esimerkiksi lelusovelluksessa tilauksen toimitukseen ja laskutukseen. Save antaa myös talletettaville tietueille avaintiedot, ja määrittelee vierasavainten perusteella haettavat kentät. Save jakaa myös tarvittaessa yhden tiedon kahdeksi (esimerkiksi tilauksessa tilataan tuotteita kahdesta varastosta, ja varastoille tehdään erilliset toimitukset(eli varasto on toimituksen otsaketiedoissa)).

Voit katsoa lelusovelluksessa saven lokkaantumalla sisään, ja menemällä tilausten käsittelynäytölle, painamalla change ja syöttämällä tilauksen kenttiin tietoja (esimerkiksi asiakasnumero 1000, tuotenumetot 3000,3001,3002). Näytön loppuun tulostuu changes if saved kappale, joka listaa muutokset, jotka lomake tällä hetkellä tekee.

Vielä puuttuvat ainakin

  • Avainten arvojen haku
  • Tämän hetkisten tietojen haku
  • Summausta
  • Kaavat kuten ‘rivin summa’=’tilattu määrä’*’tilauksen tuotteen hinta’
  • Tietojen varsinainen lisääminen terttuun
  • Tietojen kenttien oikeellisuuden tarkistus
  • Ehto prosessissa eteenpäin siirtymiseen (esimerkiksi ’tilauksen toimituspäivä’=’kuluvapäivä’ jne.)
  • Tällä hetkellä rivit on yhdistelty siten, että otsake ja rivit on yhdistelty samalle riville, näiden jakaminen otsake ja rivi tietueiksi.

Avainten arvojen haku tarkoittaa esimerkiksi lelusovelluksessa tilausnumeron, toimitusnumeron haku. Tilausnumert on lelusovelluksessa 4000sta lähtien, toimitusnumerot 5000:sta alkaen.

Tämän hetkisten tietojen haku tarkoittaa kaikkien tätä tietoa koskevien tietojen hakua, aiemmat tiedot vaikuttavat tietysti tietueen tekemiin muutoksiin. Esimerkiksi tilaus on voinut aiheuttaa toimituksen, ja määrien muutos vaikuttaa toimituksen määriin, ei välttämättä lisää uutta toimitusta, esimerkiksi.

Summauksesta esimerkkinä voisi olla tilauksen laskutettu määrä kenttä, johon pitää summata kaikki tilausriviä koskevien laskujen laskutettu määrä kentät.

Muistutukseksi vielä ohjelman pitäisi toimia millä tahansa tietueilla, voit keksiä sopivat prosessit muilta toimialoilta, tai tietotarpeista.

Lisäsin loppuun pari koodin pätkää. 2set elements muistuttaa paljon foreign key rutiinia.

Koodailen tätä juuri, koodiin ja postiin saattaa tulla muutoksia.

sovellus_get_elements(char **bones2,char *bones)
{
 int comp;
 char temps[1024],memberid[64];
 struct set *setmembers, *setm;

 setmembers=NULL;
 skk_fetch_sets(&setmembers,bones,skk->first);
 setm=setmembers;
 while(setm!=NULL) {
 set_get_element("memberid",&comp,memberid,setm->data);
 set_add_element(bones2,memberid);
 setm=setm->next;
 }
}

sovellus_get_2set_elements(char **movebones, char *tosovellus, char *fromsovellus)
{
 int c,comp,longest,rest;
 char temps[1024],allname[64],fromname[64],toname[64],savefromname[64],savetoname[64],value[64];
 char *allbones,*pab,
 *frombones,*pfb,
 *tobones,*ptb;

 sprintf(temps,"'memberid'");
 allbones=NULL;
 sovellus_get_elements(&allbones,temps);
 fprintf(stdout,"\nAB: %s",allbones);

 sprintf(temps,"'sovellus'=\"%s\", 'memberid'",fromsovellus);
 frombones=NULL;
 sovellus_get_elements(&frombones,temps);
 fprintf(stdout,"\nFB: %s",frombones);

 sprintf(temps,"'sovellus'=\"%s\", 'memberid'",tosovellus);
 tobones=NULL;
 sovellus_get_elements(&tobones,temps);
 fprintf(stdout,"\nTB: %s",tobones);
  fprintf(stdout,"\nCB: ",tobones);

  *movebones=NULL;
  rest=0;
  pfb=frombones;
  while(*pfb!='\0') {
    set_get_next_element(fromname,&comp,value,&pfb);
    ptb=tobones;
    longest=0;
    while(*ptb!='\0') {
      set_get_next_element(toname,&comp,value,&ptb);
      pab=allbones;
      while(*pab!='\0') {
        set_get_next_element(allname,&comp,value,&pab);
        if( (strstr(fromname,allname)!=NULL) &&
            (strstr(toname,allname)!=NULL) ) {
          if((c=strlen(allname))>longest) {
            longest=c;
            strcpy(savefromname,fromname);
            strcpy(savetoname,toname);
          }
        }
      }
    }
    if(longest>0) {
      sprintf(temps,"'%s' = '%s'",savetoname,savefromname);
      set_add_element_noquotes(movebones,temps);
    }
  }
  fprintf(stdout,"\nCB2: %s",*movebones);
}