Агент не сохраняет документ, вызванный со страницы.

M

MaxP

Доброго времени суток.

Вызов:
Код:
var doc: NotesDocument=currentDocument.getDocument()
var agent: NotesAgent=database.getAgent("(RefreshDocOnServer)")
agent.runOnServer(doc.getNoteID())

Агент:
Код:
Option Public
Option Declare

Sub Initialize
    Dim agentLog As New NotesLog("Agent log")
    Call agentLog.OpenAgentLog
    On Error GoTo ErrLabel
    Dim s As New NotesSession
    Dim agent As NotesAgent
    Dim db As NotesDatabase
    Set db=s.Currentdatabase
    Set agent=s.Currentagent
    Dim doc As NotesDocument
    'Print "---------"
    'Print agent.Parameterdocid
    'Print "---------"
    Set doc=db.Getdocumentbyid(agent.Parameterdocid)
    Call doc.Computewithform(false,false)
    'Print agent.Onbehalfof
'    Call doc.Save(true,false)
    If doc.Save( true, False ) Then
       Call agentLog.LogAction("Document " & doc.UniversalID & " сохранен" )
      Else
    Call agentLog.LogAction("Document " & doc.UniversalID & " не сохранен")
    End If

    Exit sub
ErrLabel:   
    Call agentLog.LogAction("Ошибка " + CStr(Err)  & ": " & Error$  & " в строке:" + CStr(Erl))     
    Call agentLog.Close
    Exit Sub
End Sub

Ошибок нет. Док не сохраняет. Док верно получает в базе. Перепробовал настройки агента. Пробовал запуск каскада агентов.
В чем может быть дело?
 
M

MaxP

1) Обработчик уходит на Call agentLog.LogAction("Document " & doc.UniversalID & " не сохранен")
2) дата модификации и редактор в доке не изменяются
 

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
617
223
BIT
26
Окромя как "you are not authorized to perform this operation" ничего больше не вижу.
ComputeWithForm не даст, ду хаст
 
M

MaxP

С правами все хорошо и ошибок нет.
Придется, писать в техподдержку IBM. Думаю запросят логи...
 
M

MaxP

Так. А если ComputeWithForm не сработает, то и смысла в агенте нет.
Дело такое: пользователь под вебом не имеет доступ (и не должен к базе) , значения из которой высчитываются в computed полях создаваемого им дока.
Вижу выход в создании копии документа в агенте и на нем ComputeWithForm и сохранении (проверим еще пройдет или нет, но какой-то глюк очевидно). Потом удаление исходного. Что скажете?
 

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
617
223
BIT
26
Попринтуйте EffectiveUserName на каждом этапе, мне очень хочется утверждать, что везде будет имя вашего web-user
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
473
у меня так - код на сервере:
JavaScript:
function calcOnDate(){
    //return "dummy";
    var name:string = "CalcOnDate";
    var unid:string = name+java.lang.System.currentTimeMillis();
    var dt:NotesDateTime =session.createDateTime("Today");
    print ("date:" + getComponent(DATE_FLD).value);
    dt.setLocalTime(getComponent(DATE_FLD).value);
    //http://www.openntf.org/main.nsf/project.xsp?r=project/xTalk%20Discussion%20Forums/defects/0ABCC3CFDEDB0C21862578B8007C67DF
    //var db:NotesDatabase = database;
    var db:NotesDatabase = sessionAsSigner.getDatabase(session.getServerName(),session.getCurrentDatabase().getFilePath());
    print ("db name:" +database.getTitle());
    //create profile document for parameters
    var profDoc:NotesDocument = db.getProfileDocument(name, unid);
    profDoc.replaceItemValue(DATE_FLD, dt);
    profDoc.replaceItemValue("parentUNID", lastContract().getUniversalID());
    profDoc.replaceItemValue("replyID", unid);
    profDoc.save();
    var profDocID:String = profDoc.getNoteID();
    //get agent and call it with profile doc
    var agent:NotesAgent = db.getAgent(name);
    print("Calling agent"+agent.getName()+" with "+profDocID);
    agent.run(profDocID);
    //extract returned value
    profDoc = db.getProfileDocument(name, unid);
    requestScope.rest = "-";
    requestScope.restprc = "-";
    requestScope.percent = "-";
    if (profDoc == null) {
        print("There isn't reply doc!");
    }
    else {
        if (profDoc.hasItem(PERCENT_FLD)) {
            requestScope.rest = profDoc.getItemValue(REST_FLD)[0];//.toString();
            requestScope.restprc = profDoc.getItemValue(RESTPRC_FLD)[0];
            requestScope.percent = profDoc.getItemValue(PERCENT_FLD)[0];
        }
        else {
            print("Calc failed");
        }
    }
    //remove doc
    profDoc.remove(false);
    return requestScope.percent
}
веб юзер не имеет прав для создания дока результат кода получаю в поле хэпаги
вызываемый агент - получает ИД профайлового дока, кот. потом удаляется, в комментах кода ссылка на оригинал
 
M

MaxP

EffectiveUserName - сервер.
вкладка Security все перебрал

последнее что можно проверить, подписать агент серваком
 

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
617
223
BIT
26
Базы на одном сервере?
Если убрать ComputeWithForm, то документ сохранится?
 
M

MaxP

На одном.
ComputeWithForm не влияет на результат.
Ради чистоты эксперимента, нужно пробовать воспроизвести данную ситуацию на чистой либо другой базе, что позже.
 
M

MaxP

В общем выяснилось вот что. Другие доки, если подставить parentdocid другой, агент сохраняет.
Доки по нужной форме нет. Далее не копал, и вероятно не буду. Но в целом понятна суть.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!