2016-04-12 28 views
0

2 işlev oluşturdum. Ben "createNewOne" den "findTitleNew" diyoruz. Ben "createNewOne" fonksiyonunda bir belge ulaşmak ama "findTitleNew" işlev döndüğünüzde Nasıl bu belgeyi kaybetmeden devam etmek için "findTitleNew" bulundu belgeyi kaybetti? NOT: Bu işlevler geneldir çünkü bu işlevleri uygulamalarda bir kereden fazla kullanıyorum.SSJS kitaplıktaki XPages işlevi belge olarak dönmez

<xp:button value="Create" id="btnCreate"> 
      <xp:eventHandler event="onclick" submit="true" 
       refreshMode="complete" immediate="false" save="true"> 
       <xp:this.action><![CDATA[#{javascript:createNewDoc(document1)}]]></xp:this.action> 
      </xp:eventHandler> 
     </xp:button> 


function findTitleNew(currDoc:NotesXSPDocument) 
{ 
    try 
    { 
     var dbOther1:NotesDatabase = session.getDatabase(database.getServer(),sessionScope.kontak_db_Path); 
     if (currDoc.getItemValueString("UNID")!="") 
     { 
      var otherDoc:NotesDocument = dbOther1.getDocumentByUNID(currDoc.getItemValueString("UNID")) 
     } 
    } 
    catch (e) 
    { 
     requestScope.status = e.toString(); 
    } 
} 

function createNewOne(docThis:NotesXSPDocument) 
{ 
    try 
    { 
     //do stafff 
     findTitleNew(docThis) 
     //do stafff 
    } 

    catch (e) 
    { 
     requestScope.status = e.toString(); 
    } 
} 

Herhangi bir öneri takdir edilir.
Cumhur Ata

cevap

1

Benim SSJS gerçekten paslı ve bana diyorsunuz ne istediğinizi tam olarak anlatmak AMA için biraz zor: o belgeyi kaybetmeden nasıl devam etmek için 'findTitleNew "Ben bulundu belgeyi kaybetti' ? "

sizin işlevi "findTitleNew" şey döndürmez. Demek orada bir belgeyi alırsanız onunla çalışabilir, ancak "() createNewOne" içinde hareket yapmak istiyorsanız ihtiyacınız fonksiyonu bulunan belgeyi Sonra

if (currDoc.getItemValueString("UNID")!="") 
     { 
      var otherDoc:NotesDocument = dbOther1.getDocumentByUNID(currDoc.getItemValueString("UNID")) 
return otherDoc; 
     } 

dönmek için:

function createNewOne(docThis:NotesXSPDocument) 
{ 
    try 
    { 
     //do stafff 
     var returnDoc = findTitleNew(docThis); 
     if (null != returnDoc) { 
      // do stuff with returnDoc here... 
     } 
     //do stafff 
    } 

    catch (e) 
    { 
     requestScope.status = e.toString(); 
    } 
} 
0

Bu sizin değişken otherDoc ait kapsamı ilgili.

Sen var otherDoc olarak tanımlı değişkenlere. yalnızca işlev içinde "yaşayan" bu yüzden
var otherDoc The scope of a variable declared with var is its current execution context, which is either the enclosing function or, for variables declared outside any function, global. bir işlev içinde tanımlanır. Bu, otherDoc'un işlev dışında kullanılamayacağı anlamına gelir.

Bildirmeksizin otherDoc'a bir değer atayabilirsiniz. Bu durumda küresel olarak kullanılabilir. Ancak bu tavsiye edilmez, çünkü kod oldukça dağınık olabilir.

iyi yolu Davut onun cevabını gösterir gibi return otherDoc ile değişken döndürmektir.

İlgili konular