我编写了一个REST服务来提供一些数据.它受密码保护.
我正在尝试编写一个后台进程,它将获取数据并将其填充到我在应用程序中的sqlLite数据库中.
我最初没有使用身份验证执行此操作
- (void) callWebService {
dispatch_sync(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:
scoularDirectoryURL];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我不认为我可以添加身份验证.如果可以,我会用它.
我正在寻找的是使用用户/密码认证的NSURLSession的一个很好的简单解释.
我不明白以下警告:
不兼容的指针类型将'NSError*__ strong*'发送到'NSString*__ autoreleasing*'类型的参数
抛出这个的方法是
BSSPhoneNumberFormatter *formatter = [[BSSPhoneNumberFormatter alloc] init];
NSString *tmp = self.dtlPhnNbr.text;
id objectValue;
NSError *error;
[formatter getObjectValue:&objectValue forString:tmp errorDescription:&error];
Run Code Online (Sandbox Code Playgroud)
最后一行有警告.
BSSPhoneNumberFormatter的h文件是
#import <Foundation/Foundation.h>
@interface BSSPhoneNumberFormatter : NSFormatter
@end
Run Code Online (Sandbox Code Playgroud)
而且方法是
- (BOOL)getObjectValue:(id *)anObject forString:(NSString *)string errorDescription:(NSString **)error {
*anObject = (id)[self stripNonDigits:string];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我知道(NSString**)错误是指向指针的指针.一个不同的帖子说要在调用的方法和调用方法中用(NSString*)替换(NSString**),但如果我这样做,我会得到很多错误.
到底是怎么回事?
我无法在表单表格中控制表单布局中的间距.我想在每一行之间留一些空间,所以事情并没有那么紧张.开箱即用它看起来像这样:
我已经尝试为每一行添加填充和边距,我已经在CSS库中添加了一些代码:
.lotusForm tr.lotusFormFieldRow td, .lotusForm td.lotusFormFieldRow {
padding-bottom: 50px;
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
<?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">
<xp:this.data>
<xp:dominoDocument var="document1" formName="PCInventory"></xp:dominoDocument>
</xp:this.data>
<xe:formTable id="frInventory" disableErrorSummary="true"
disableRowError="true" formTitle="Inventory" labelWidth="100px"
labelPosition="left">
<xp:this.facets></xp:this.facets>
<xe:formRow id="formRow3" labelPosition="inherit"></xe:formRow>
<xe:formRow id="formRow2" labelPosition="inherit"
label="Serial Number" style="padding-bottom:20.0px">
<xp:inputText value="#{document1.computerName}"
id="computerName1" style="width:150px">
</xp:inputText>
<xp:message id="message2" for="computerName1" />
</xe:formRow>
<xe:formRow id="formRow8" labelPosition="inherit"
label="Model">
<xp:inputText value="#{document1.computerName}"
id="inputText6" style="width:150px">
</xp:inputText>
<xp:message id="message1" for="computerName1" />
</xe:formRow>
<xe:formRow id="formRow1" labelPosition="inherit"
label="Office /Location">
<xp:inputText value="#{document1.computerName}"
id="inputText1" style="width:150px">
</xp:inputText>
</xe:formRow>
<xe:formRow id="formRow5" labelPosition="inherit"
label="Check In …Run Code Online (Sandbox Code Playgroud) 我在Xpages中有一个由ObjectBean管理的文档.将我在Xpage中的字段与EL绑定,因此字段看起来像......
<xp:inputText id="inputText2" xp:key="field"
value="#{ObjectBean.serialNumber}" />
</xp:this.facets>
Run Code Online (Sandbox Code Playgroud)
在我的bean中,我有getter,setter,加载,验证等等,它工作正常.
现在我需要添加一个日期字段.在Xpage我有
<xp:inputText xp:key="field"
id="checkInDate" value="#{ObjectBean.checkInDate}">
<xp:this.converter>
<xp:convertDateTime
type="date">
</xp:convertDateTime>
</xp:this.converter>
<xp:dateTimeHelper>
</xp:dateTimeHelper>
</xp:inputText>
Run Code Online (Sandbox Code Playgroud)
我意识到添加Date或DateTime字段需要一些特殊代码,但无法弄清楚要做什么.
我的吸气剂和制定者是:
public Date getCheckInDate() {
if (checkInDate == null) {
checkInDate = new Date();
}
return checkInDate;
}
public void setCheckInDate(Date checkInDate) {
this.checkInDate = checkInDate;
}
Run Code Online (Sandbox Code Playgroud)
在我的保存中,我正在尝试这个
日期tmpDate = session.createDateTime(checkInDate).toJavaDate(); doc.replaceItemValue( "checkInDate",checkInDate);
还有这个
doc.replaceItemValue("checkInDate",session.createDateTime(checkInDate));
Run Code Online (Sandbox Code Playgroud)
但是我得到一个错误,或者在第二种情况下我没有收到错误但没有保存任何内容(文档未保存).
我认为我非常聪明地编写这种方法来加载一个组的成员.但返回的值不是通用名称格式:
如何轻松地以通用名称获取这些值或轻松将它们转换为通用名称?
private void loadNetworkTeam() {
try {
Session session = Factory.getSession();
Database tmpDB = session.getCurrentDatabase();
Database tmpDB2 = session.getDatabase(tmpDB.getServer(), "names.nsf");
View grpView = tmpDB2.getView("($VIMGroups)");
Vector<Object> nTeam = new Vector<Object>();
nTeam.addElement("NetWorkTeam");
Document grpDoc = grpView.getFirstDocumentByKey("Network Team");
Item itm = grpDoc.getFirstItem("members");
networkTeam.addAll(itm.getValues());
} catch (Exception e) {
XspOpenLogUtil.logError(e);
}
}
Run Code Online (Sandbox Code Playgroud) 我发布了用于解决此问题的代码.感谢Per和Eric McCormick以及Paul Withers.
<xp:scriptBlock id="scriptBlock2">
<xp:this.value><![CDATA[$(document).ready(
function() {
x$("#{javascript:return getComponent(compositeData.fieldName).getClientId(facesContext);}").select2({
placeholder : "Choose an employee",
allowClear: true,
minimumResultsForSearch : 3
})
}
);
]]>
</xp:this.value>
</xp:scriptBlock>
Run Code Online (Sandbox Code Playgroud)
我之前的问题的答案是非常有用的.我正在制作一个Select2自定义控件,需要在SSJS函数中使用动态生成的ID
我通过给它fieldName动态创建自定义控件中字段的id,如下所示:
id="${javascript:compositeData.fieldName}"
Run Code Online (Sandbox Code Playgroud)
在我的CC的其他部分,我使用该计算来访问id号,例如:
<xp:message
id="message1"
for="#{javascript:compositeData.fieldName}"
styleClass="help-block">
</xp:message>
Run Code Online (Sandbox Code Playgroud)
但是在构建我的Select2 CC时,我需要在脚本中添加一些SSJS,如下所示:
<xp:scriptBlock id="scriptBlock2">
<xp:this.value><![CDATA[
$(document).ready(
function() {
x$("#{id:[compositeData.fieldName]}").select2({
placeholder: "Select An Employee",
allowClear: true
});
}
);
]]></xp:this.value>
</xp:scriptBlock>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我无法弄清楚如何动态生成ID.
x$("#{id:[compositeData.fieldName]}")
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
id="view1">
<xp:scriptBlock id="scriptBlock2">
<xp:this.value><![CDATA[
$(document).ready(
function() {
x$("#{id:[compositeData.fieldName]}").select2({
placeholder: "Select An Employee",
allowClear: true
});
} …Run Code Online (Sandbox Code Playgroud) 我有一个有4个字段的表单
KEY LEVEL1 LEVEL2 LEVEL3
关键是文档类型,我们的目的是Level1,Level2,Level3.
如果文档中的键是LEVEL1,则LEVEL1中有一些值,例如"App 1".
如果文档中的键是LEVEL2,则LEVEL1 中的值必须是Level1文档中的值之一.然后LEVEL2就像TITLE1.
最后,如果存在密钥为LEVEL3的文档,那么它必须在LEVEL1和LEVEL2中具有有效值,然后在LEVEL3中具有类似"Page3"的内容.
所以这是一个明显的树结构.
我正在尝试构建一个分类视图(在Xpages中,但我认为我必须从LN中的分类视图开始),如下所示:
如果用户可以打开或关闭曲折以折叠类别,或者单击该条目以打开该文档.因此,如果用户单击TITL1,他们将转到TITLE1文档,如果他们点击TITLE2,他们将转到该文档,依此类推.
对于我的生活,我无法弄清楚这一点.也许这是不可能的.
任何帮助将不胜感激.
感谢所有的建议.
我试着用建议做一个笔记视图,但它只是没有用.我认为最好不要在经典笔记开发中思考,而是用Xpages术语思考.看起来像我正在寻找的是嵌套重复.
这就是我所做的.结果如下:

我只希望用户添加一个条目,这就是为什么我在最后一个条目上有一个"+".我将允许用户最终删除条目并移动它们.
欢迎任何有关UI改进的建议.
我在XPiNC中运行Xpages.
我通常的Xpages应用程序模式是将xpHome.xsp页面设置为打开的第一个页面.在这个I页面中,我设置了应用程序级别的任何范围变量,然后前往"真正的"第一页.
现在我遇到了一个问题.我的当前数据库将在状态更改时发送电子邮件,这将包括指向文档的文档链接,该文档指向要打开的正确X页.但是,由于用户没有浏览主页,因此我的applicationScope vars正在设置中.
我想我可以通过在initApp函数中设置一个信号量来解决这个问题 - 它最后要做的是在applicationScope.semaphore字段中放置一个"Y".因此,当我打开我的Xpage时,它首先要检查的是,如果它是null,那么我调用initApp函数.
由于某种原因,这是行不通的.但即便如此,我仍希望找到相当于旧数据库脚本"Initialize"的事件.我第一次打开数据库时可以调用的东西.
其他人如何处理这个问题?