【发布时间】:2017-12-06 12:59:39
【问题描述】:
我正在尝试使用 F# 来生成 XML,基于这个复杂的 XSD Schema (
http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=BALgvpK9Jvo=)
但我收到编译器错误:
FS0503 接受 0 个参数的成员或对象构造函数“Dest”不是 可从此代码位置访问。方法的所有可访问版本 'Dest' 接受 1 个参数。
module xsd1
open FSharp.Data
open System.Xml.Linq
type nfe = XmlProvider<Schema="nfe_v4.00.xsd", ResolutionFolder="c:/temp/nfe">
let GenerateNFe () =
let ide = Unchecked.defaultof<nfe.Ide>
let emit = Unchecked.defaultof<nfe.Emit>
let mydest = nfe.Dest(cnpj=None,
cpf=(Some "12345678901"),
idEstrangeiro=None,
xNome=(Some "TONY"),
enderDest=None,
indleDest="",
ie=None,
isuf=None,
im=None,
email=(Some "tonyvca@oldmail.com")
)
let i = nfe.InfNFe(
versao="4.00",
id="NFe123 F#",
ide=ide,
emit=emit,
avulsa=None,
dest=(Some mydest),
retirada=None,
entrega=None,
autXmLs=Unchecked.defaultof<nfe.AutXml[]>,
dets=Unchecked.defaultof<nfe.Det[]>,
total=Unchecked.defaultof<nfe.Total>,
transp=Unchecked.defaultof<nfe.Transp>,
cobr=None,
pag=Unchecked.defaultof<nfe.Pag>,
infAdic=None,
exporta=None,
compra=None,
cana=None
)
i
如何填写 dest“属性”?
我也改不了
let ChangeDest (n: nfe) =
let novodest = nfe.Dest(cnpj=None,
cpf=Some "9999999999",
idEstrangeiro=None,
xNome=Some "NEW TONY",
enderDest=None,
indleDest=None,
ie=None,
isuf=None,
im=None,
email=Some "tonyvca@freemail.com"
)
let newdocument = { n with InfNFe.dest = novodest }
newdocument
为方便起见,我附上了一个带有 XSD 和 F# 代码的示例项目
https://drive.google.com/open?id=1IbMpmOKfh4B-gKj4CCXTuDXlQxyUN1Wr
这不起作用:
let mydest = new nfe.Dest(cnpj=None, cpf=(Some "11111111111"), idEstrangeiro=None, xNome=(Some "TONY"), enderDest=None, indleDest="indledest", ie=None, isuf=None, im=None, email=(Some "tonyvca@hotmail.com") )
但这有效:
let mydest = new nfe.Dest(None, (Some "11111111111"), None, (Some "TONY"), None, "indledest", ie=None, isuf=None, im=None, email=(Some "tonyvca@hotmail.com") )
如果我删除命名参数,直到 indleDest 部分,它可以工作,你能看看并帮助我如何使它工作将所有命名参数写入?
【问题讨论】:
-
indleDest应该是字符串,而不是字符串选项。不幸的是,当您在提供的类型的构造函数中使用错误的类型时,您不会收到有用的错误消息。 -
感谢您指出这一点!但是在我修复它之后仍然会收到该错误消息
-
尝试将括号放在任何有空格的地方:例如
(Some "12345678901")。我记得有时需要那个。这有帮助吗? -
括号似乎没有解决这个错误。
-
你能尝试在没有命名参数的情况下传递值吗?我知道它的可读性较差且更容易出错,但这只是另一种尝试。不幸的是,我无法访问我的电脑,所以目前我无能为力