RESTService key

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#1
вычисление ключа меня заинтересовало...
принтанул в консоль - получил баден-баден
перевожу;) - в рестсервисе вычисляю ключ
XML:
<xe:this.keys><![CDATA[${javascript:var keys = [];
keys.push(context.getUser().getCommonName());
var date:NotesDateTime=session.createDateTime("01.07.2016");//java.util.Date("01.07.2016");
//print("Language");// + getLanguage());
//print ("DATE_FORMAT");// + DATE_FORMAT);
var dt = @Date("07/01/2016");
var dt1 = @Date("01.07.2016");
keys.push(date);
viewScope.put("curdate", date.getLocalTime());
print("curdate:"+viewScope.get("curdate"));
return keys;}]]></xe:this.keys>
в консоль получаю:
27.09.2016 19:12:14 HTTP JVM: curdate:01.07.2016
27.09.2016 19:12:14 HTTP JVM: calc date
27.09.2016 19:12:17 HTTP JVM: curdate:01.07.2016
средняя запись - это получение значения в поле
XML:
    <xp:label id="label3">
        <xp:this.value><![CDATA[#{javascript:print("calc date");
return viewScope.get("curdate");}]]></xp:this.value>
    </xp:label>
вопрос - почему отрабатывает код, для key, два раза?
$ ставил для кода - чтобы гарантировать значение в label (если # - "оба раза" будут после лейбла)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#2
у меня - три раза :)
Но если с $ - то один раз. Может у тебя просто в консоли строки "слились"?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#4
я имел в виду, что в консоле отображается лог с прошлого действия. Очисти консоль и проверь.
У меня все отображается по одному разу

[3514:000D-0154] 28.09.2016 13:43:03 HTTP JVM: curdate:01.07.2016
[3514:000D-0154] 28.09.2016 13:43:03 HTTP JVM: calc date

JavaScript:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">

    <xe:restService id="restService1">
        <xe:this.service>
            <xe:viewJsonService viewName="resttst">
                <xe:this.keys><![CDATA[${javascript:var keys = [];
keys.push(context.getUser().getCommonName());
var date:NotesDateTime=session.createDateTime("01.07.2016");//java.util.Date("01.07.2016");
//print("Language");// + getLanguage());
//print ("DATE_FORMAT");// + DATE_FORMAT);
var dt = @Date("07/01/2016");
var dt1 = @Date("01.07.2016");
keys.push(date);
viewScope.put("curdate", date.getLocalTime());
print("curdate:"+viewScope.get("curdate"));
return keys;}]]></xe:this.keys>
            </xe:viewJsonService>
        </xe:this.service>
    </xe:restService>
   
<xp:label id="label3">
        <xp:this.value><![CDATA[#{javascript:print("calc date");
return viewScope.get("curdate");}]]></xp:this.value>
    </xp:label>   
   
    </xp:view>
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#5
@NickProstoNick та не - все как описал и разрыв в 4-сек
я нажимаю обновление страницы в ФФ
и резалт у меня именно такой
что очень смущает
может gridx дергает рест еще раз, но запроса-то нет (только один)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#6
Ну вот я привел свой пример, который у меня работает.
Пробуй голый rest на странице и поймешь что работает не правильно
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#7
@NickProstoNick отключил создание грида - перестало
мда... странно - обращение
JavaScript:
            var store = new JsonRest( {
                idProperty : '@noteid',
                target : storePath
            });
приводит к подобному (как я понимаю)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#9
а пример кода показать не хочешь?
не проблема...
просто не считал это интересным ;)
JavaScript:
function makeGrid() {
    require( [
            "gridx/Grid",
            "gridx/modules/ColumnResizer"
            // ,"gridx/modules/VirtualVScroller"
            , "gridx/modules/CellWidget", "gridx/modules/Edit",
            "dojo/store/JsonRest", "gridx/core/model/cache/Async",
            "dojo/domReady!" ], function(Grid, Resizer
    // , VirtualVScroller
            , CellWidget, Edit, JsonRest, Cache) {
        // return;
            var store = new JsonRest( {
                idProperty : '@noteid',
                target : storePath
            });
            var columns = [
                           {
                               id : 'rpt_group_2'
                                   ,field : 'rpt_group_2'
                                   ,name : 'sub group'
                                   ,width : '100px'
                           }
                           ,{
                               id : 'rpt_group_3'
                               ,field : 'rpt_group_3'
                               ,name : 'brand group'
                               ,width : '300px'
                           }, {
                               id : 'f_vol'
                               ,field : 'f_vol'
                               ,decorator:function(value) {
                                   try{
                                       return (value.length==0)? 0 : value;
                                   }
                                   catch(e){
                                   }
                                   return value;
                               }
                               ,name : 'volume'
                               ,width : '100px'
                           }];
            var tmpdate=new Date(curdate);
            for(var i=1;i<25; i++){
                tmpdate.setMonth(tmpdate.getMonth()+1);
                columns.push({
                        id : 'fc_vol_'+i
                            ,field : 'fc_vol_'+i
                            ,name : formatDate(tmpdate)
                            ,width : '100px'
                            ,editable : true
                            ,decorator:function(value) {
                                try{
                                    return (value.length==0)? 0 : value;
                                }
                                catch(e){
                                }
                                return value;
                            }
                            ,editorArgs : {
                                fromEditor : processState
                            }
                        // ,alwaysEditing : true
                                });
            }

            grid = new Grid( {
                id : "my_gridX",
                cacheClass : Cache,
                store : store,
                structure : columns,
                vScrollerBuffSize : 10,
                modules : [ Resizer
                // , VirtualVScroller
                        , CellWidget, Edit ]
            });
            // Put it into the DOM tree.
            grid.connect(grid, "onRowClick", function(eventInfo) {
                var unid = gridInfo(grid, eventInfo, '@unid');
                // grid.row(eventInfo.rowId).item()['@unid'];
                    gunid = unid;
                    var len = flds.length;
                    for ( var i = 0; i < len; i++) {
                        gkeys[i] = gridInfo(grid, eventInfo, flds[i]);
                        console.log(flds[i] + "->" + gkeys[i]);
                    }

                    // alert(unid);
                    console.log("UNID:" + unid);
                    chartData();
                });
            grid.placeAt(gridID);
            grid.startup();
        });
}
ЗЫЖ не поленись отвечать со ссылкой на меня или пост ;) - атоя не всегда обновляю страницы и спецом не отслеживаю топики, а так - будет уведомление :)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#10
@lmike, я имел в виду код страницы :)
В общем не суть важно..все равно не успею разобраться
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#11
нопроблем, но как я понимаю - трабла именно в гриде, закомменченное не удалил
XML:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex"
    xmlns:xc="http://www.ibm.com/xsp/custom"><!--
    <xp:this.data>
        <xp:dominoView var="view1" viewName="dateLookupChart"
            keysExactMatch="true">
            <xp:this.keys><![CDATA[${javascript:var dtany:NotesDateTime=session.createDateTime(@Today());
dtany.setAnyDate();
var date=@Date(@Year(@Today()),@Month(@Today()),1);
var dt:NotesDateTime = session.createDateTime(date);
var dtPast:NotesDatetime=session.createDateTime(@Adjust(date,0,(-25),0,0,0,0));
var dtr:DateRange = session.createDateRange(dtPast,dt);
//dtr.setEndDateTime(dt);
var keys=[];
keys.push(dtr);
keys.push(context.getUser().getCommonName());
return keys;}]]></xp:this.keys>
        </xp:dominoView>
    </xp:this.data>
    --><xc:ccGridxResources></xc:ccGridxResources>
    <xp:this.resources>


        <xp:script src="/ViewUtils.jss" clientSide="false"></xp:script>
        <xp:script src="/FCUtils.js" clientSide="true"></xp:script>
        <xp:script src="/RowUtils.js" clientSide="true"></xp:script>
        <xp:script src="/DateUtils.js" clientSide="true"></xp:script>
        <!--
            <xp:dojoModule name="dojox.data.HtmlStore"></xp:dojoModule>
        -->
        <xp:dojoModule name="dojox.charting.widget.Chart2D"></xp:dojoModule>
        <xp:dojoModule name="dojox.charting.themes.PlotKit.blue"></xp:dojoModule>
        <xp:dojoModule name="dojox.charting.widget.Legend"></xp:dojoModule>

        <xp:dojoModule name="dojox.charting.themes.MiamiNice"></xp:dojoModule>

        <xp:script src="/loading.js" clientSide="true"></xp:script>
        <xp:script src="/OpenLogXPages.jss" clientSide="false"></xp:script>
        <!--<xp:styleSheet href="/intecReport.css"></xp:styleSheet>-->

        <xp:dojoModule name="dojox.charting.action2d.Tooltip"></xp:dojoModule>
    </xp:this.resources>
    <!--
        Need this to force compatibility mode, otherwise get error
        "this.rawNode.path is null or not an object"
    -->
    <xp:this.beforePageLoad><![CDATA[#{javascript:
try {
    if (context.getUserAgent().isIE(8, 8)) {
        var exCon = facesContext.getExternalContext();
        var response = exCon.getResponse();
        response.setHeader("X-UA-Compatible", "IE=EmulateIE7");
        }
} catch (e) {
}}
]]></xp:this.beforePageLoad>

    <xe:keepSessionAlive id="keepSessionAlive1" delay="60" rendered="false"></xe:keepSessionAlive>

    <xe:restService id="restService1" pathInfo="gridData" rendered="false">
        <xe:this.service>
            <xe:viewJsonService defaultColumns="true"
                keysExactMatch="true" viewName="dateLookupUser" var="entry"
                compact="true" formName="forecast" contentType="application/json">
                <xe:this.keys><![CDATA[${javascript:var keys = [];
keys.push(context.getUser().getCommonName());
var date:NotesDateTime=session.createDateTime("01.07.2016");//java.util.Date("01.07.2016");
//print("Language");// + getLanguage());
//print ("DATE_FORMAT");// + DATE_FORMAT);
var dt = @Date("07/01/2016");
var dt1 = @Date("01.07.2016");
keys.push(date);
//var tz=new java.util.Timezone();
//http://www.timdown.co.uk/code/simpledateformat.php
var sf:java.text.SimpleDateFormat=new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
viewScope.put("curdate", sf.format(date.toJavaDate()));
viewScope.put("pageName", view.getPageName());
print("curdate:"+viewScope.get("curdate"));
return keys;}]]></xe:this.keys>
            </xe:viewJsonService>
        </xe:this.service>
    </xe:restService>
    <!--
       
        <xe:restService id="restService2" pathInfo="gridData1">
        <xe:this.service>
        <xe:viewItemFileService viewName="dateLookupUser"
        keysExactMatch="true" defaultColumns="true"
        contentType="application/json" var="entry">
        <xe:this.keys><![CDATA[#{javascript:var keys = [];
        keys.push(context.getUser().getCommonName());
        var dt = @Date("07/01/2016");
        var dt1 = @Date("01.07.2016");
        keys.push(dt1);
        return keys;}]]></xe:this.keys>
        </xe:viewItemFileService>
        </xe:this.service>
        </xe:restService>
    -->
    <xe:jsonRpcService id="jsonRpcService1" pathInfo="rpcScope"
        serviceName="rpcScope">
        <xe:this.methods>
            <xe:remoteMethod script="return rpcGetChartDataY(map);"
                name="getChartData">
            <xe:this.arguments>
                <xe:remoteMethodArg name="map" type="list"></xe:remoteMethodArg>
            </xe:this.arguments></xe:remoteMethod>
            <xe:remoteMethod name="setViewScope"
                script="return rpcSetViewScope(xName,xVal);">
                <xe:this.arguments>
                    <xe:remoteMethodArg name="xName" type="string"></xe:remoteMethodArg>
                    <xe:remoteMethodArg name="xVal" type="list"></xe:remoteMethodArg>
                </xe:this.arguments>
            </xe:remoteMethod>
        </xe:this.methods>
    </xe:jsonRpcService>
    <xp:scriptBlock id="scriptBlock1">
        <xp:this.value><![CDATA[var editedRows = [];
var gunid = "";
var gkeys={};
var pageName="#{javascript:@Right(view.getPageName(),"/")}";
var curdate="#{javascript:viewScope.get('curdate')}";
console.log("calculated page Name:"+pageName);
console.log("date:"+curdate);
var tmp=new Date(curdate);
tmp.setMonth(tmp.getMonth()+1);
console.log("month + 1:"+tmp.getMonth());
var storePath=pageName+"/"+"gridData";
var chartID="#{id:fc_chart}";
var legendID="#{id:fc_legend}";
var gridID="#{id:gridX_Here}";
var flds=['country','region','rpt_group_1','rpt_group_2','rpt_group_3','rpt_group_4'];
var vol=0;
makeGrid();
]]></xp:this.value>
    </xp:scriptBlock>

    <xp:br></xp:br>
    <xp:table>
        <xp:tr>
            <xp:td>
                <xp:panel id="fc_chart"
                    style="height:200px; width:600px;">
                    <!--<div class="action" type="Tooltip"></div>
                --></xp:panel>
                </xp:td>
            <xp:td>
                <xp:panel id="fc_legend"></xp:panel></xp:td>
        </xp:tr>
    </xp:table>
    <xp:label value="date:" id="label4"></xp:label>

    <xp:label id="label3">
        <xp:this.value><![CDATA[#{javascript:print("calc date");
return viewScope.get("curdate");}]]></xp:this.value>
    </xp:label>
    <xp:br></xp:br>
    <xp:panel style="height:300px;width:800px" id="gridX_Here"></xp:panel>


   
    <!--
        <xp:button id="button1" value="Сохранить">
        <xp:this.onclick><![CDATA[// Reset the list of edited rows to clear the styles
        editedRows = [];
        var args = {
        onError : function() {
        alert('error!');
        }
        };
        restService1.save(args);
       
        // Refresh the grid
        restService1.close();
        // dijit.byId('#{id:flatGrid}')._refresh();
       
        ]]></xp:this.onclick>
       
        <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" refreshId="flatGrid">
        </xp:eventHandler>
        </xp:button>
    -->
    <xp:button value="XHR" id="button1" onclick="xhr();">

    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[try{
/*    var keys={};
    keys["country"]="val1";
    keys["region"]="val2";
    keys["rpt_group_1"]="";
    keys["rpt_group_2"]="";
    keys["rpt_group_3"]="";
    keys["rpt_group_4"]="";*/
    var len=flds.length;
    for(var i=0; i<Object.keys(gkeys).length;i++){
        console.log("num:"+i+"->" + gkeys[i]);
    }
    rpcScope.getChartData(gkeys).addCallback(function(xVal){
        try{
            console.log("xVal:"+xVal);
        }catch (e){
            alert(e.toString());
        }
    });
} catch (e) {
    alert(e.toString());
}]]></xp:this.script>
    </xp:eventHandler></xp:button>
    <xp:br></xp:br>
    <xp:label value="#{javascript:context.getUser().getCommonName()}"
        id="label1">
    </xp:label>
    <!--
        <xe:djxDataGrid storeComponentId="restService1" id="flatGrid"
        singleClickEdit="true" onRowClick="clickRow(arguments);"
        onStyleRow="styleRow(arguments);">
        <xe:djxDataGridColumn id="djxDataGridColumn1" editable="false"
        field="date" formatter="formatDate">
        </xe:djxDataGridColumn>
        <xe:djxDataGridColumn id="djxDataGridColumn2" editable="false"
        field="f_vol">
        </xe:djxDataGridColumn>
        <xe:djxDataGridColumn id="djxDataGridColumn3" field="fc_vol_1"
        editable="true">
        </xe:djxDataGridColumn>
        </xe:djxDataGrid>
    -->
    <xp:br></xp:br>
    <xp:label id="label2"><xp:this.value><![CDATA[#{javascript:var nec:NotesViewEntryCollection=historyEntries();
var entry:NotesViewEntry=nec.getFirstEntry();
var result:string="";
while (entry1=null){
    result+=entry.getColumnValues(2)+";";
    entry=nec.getNextEntry(entry);
}
return result;}]]></xp:this.value></xp:label>
   
</xp:view>
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#12
@lmike , мне кажется, что тут вопрос в событии beforePageLoad как в таковом, а не в гриде.
Может это событие перегружает страницу?
Хотя сложно проверять, у тебя грид в кастомконтроле, на сколько я понял.
А код страницы отрабатывает корректно
 
Последнее редактирование модератором:

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#13
отключение стораджа в гриде - эффект уходит