Hi Dan.

I’m not sure how to use the SudoService inside a FixtureScript.

I have the following:


public class DemoWithAllRecordsFixture extends FixtureScript {

    public DemoWithAllRecordsFixture() {
        this.withDiscoverability(Discoverability.DISCOVERABLE);
    }

    @Override
    protected void execute(
            final ExecutionContext executionContext) {

        executionContext.executeChild(this, new 
ExcelInheritedConditionsSNPGenotypeFixture());
        executionContext.executeChild(this, new ExcelDrugsSNPGenotypeFixture());
        executionContext.executeChild(this, new 
ExcelTraitsSNPGenotypeFixture());

    }

The ExcelInheritedConditionsSNPGenotypeFixture contains many wrapped action 
invocations, so the following exception is thrown:

Caused by: org.apache.isis.applib.services.wrapper.HiddenException: Reason: 
Could not locate application user for initialisation. Identifier: 
com.tellmegen.domain.model.inheritedconditions.InheritedCondition#upsertSNPGenotype(java.lang.Integer,com.tellmegen.domain.model.AppliesToSex,java.lang.String,java.lang.String,com.tellmegen.domain.model.inheritedconditions.InheritedConditionHeredity,com.tellmegen.domain.model.inheritedconditions.InheritedConditionPhenotype,com.tellmegen.domain.model.inheritedconditions.InheritedConditionStatus,java.lang.String,java.lang.String)
        at 
org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.toException(DomainObjectInvocationHandler.java:732)
        at 
org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.notifyListenersAndVetoIfRequired(DomainObjectInvocationHandler.java:700)
        at 
org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.checkVisibility(DomainObjectInvocationHandler.java:682)
        at 
org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.handleActionMethod(DomainObjectInvocationHandler.java:607)
        at 
org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.invoke(DomainObjectInvocationHandler.java:263)
        at 
org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForJavassist$1.invoke(ProxyInstantiatorForJavassist.java:72)
        at 
com.tellmegen.domain.model.inheritedconditions.InheritedCondition_$$_jvstcc_7.upsertSNPGenotype(InheritedCondition_$$_jvstcc_7.java)
        at 
com.tellmegen.domain.model.importing.ImportInheritedConditionSNPGenotype.saveToDatabase(ImportInheritedConditionSNPGenotype.java:244)
        at 
com.tellmegen.domain.model.importing.ImportInheritedConditionsSNPGenotypeService.importInheritedConditionsSNPGenotypes(ImportInheritedConditionsSNPGenotypeService.java:38)
        at 
com.tellmegen.fixture.model.inheritedconditionsnpgenotype.ExcelInheritedConditionsSNPGenotypeFixture.execute(ExcelInheritedConditionsSNPGenotypeFixture.java:24)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:528)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:498)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChild(FixtureScript.java:487)
        at 
com.tellmegen.fixture.TellMeGenDemoWithAllRecordsFixture.execute(TellMeGenDemoWithAllRecordsFixture.java:34)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.access$0(FixtureScript.java:546)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript.run(FixtureScript.java:719)
        at 
org.apache.isis.applib.fixturescripts.FixtureScript.install(FixtureScript.java:814)
        at 
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixture(FixturesInstallerDelegate.java:205)
        at 
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtureInTransaction(FixturesInstallerDelegate.java:171)
        at 
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:158)
        at 
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:138)
        at 
org.apache.isis.core.runtime.fixtures.FixturesInstallerAbstract.installFixtures(FixturesInstallerAbstract.java:42)
        at 
org.apache.isis.core.runtime.systemusinginstallers.IsisSystemAbstract.installFixturesIfRequired(IsisSystemAbstract.java:85)
        at 
org.apache.isis.core.runtime.system.IsisSystemFixturesHookAbstract.init(IsisSystemFixturesHookAbstract.java:128)
        at 
org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:133)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
        at 
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
        at 
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
        at 
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
        at 
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.Scopes$1$1.get(Scopes.java:65)
        at 
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
        at 
com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53)
        at 
com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110)
        at 
com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75)
        at 
com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73)
        at 
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
        at 
com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:73)
        at 
com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:60)


If try to use them inside a SudoService.sudo(…) call I don’t have access to the 
“executionContext” (it’s private).

So basically, I would need to make the “executionContext” field of 
FixtureScript “public”, or being able to use SudoService to override the User 
globally, without needing to use a “Callable” construct.

Do you agree?

Thanks,

Oscar





> El 18/4/2015, a las 12:35, GESCONSULTOR <o....@gesconsultor.com> escribió:
> 
> 
> 
> Many thanks, Dan.
> 
> I'll try it!
> 
>> El 18/4/2015, a las 12:26, Dan Haywood <d...@haywood-associates.co.uk> 
>> escribió:
>> 
>> Hi Oscar,
>> 
>> I hit this same issue a couple of weeks ago while refactoring our example
>> todoapp, which led me to inventing the "SudoService".
>> 
>> Not yet documented, but you can see its usage here [1]
>> 
>> HTH
>> Dan
>> 
>> [1]
>> https://github.com/isisaddons/isis-app-todoapp/blob/master/fixture/src/main/java/todoapp/fixture/module/todoitem/ToDoItemCreate.java#L134
>> 
>>> On 18 April 2015 at 10:17, QUALITEC - Óscar Bou <o...@qualitec.es> wrote:
>>> 
>>> Hi all.
>>> 
>>> I have a FixtureScript that invokes some factory methods that include
>>> setters that are invoking by wrapping the domain object (for ensuring that
>>> the validateXXX, modifyXXX, etc. methods are also invoked).
>>> 
>>> public class TwentyPercentForTwoOrdersCoupon extends FixtureScript {
>>> 
>>>   @Override
>>>   protected void execute(
>>>           final FixtureScript.ExecutionContext executionContext) {
>>> 
>>>       this.coupons.createCoupon("50€-2ORDERS", LocalDate.now(),
>>> LocalDate.now().plusDays(3), 2L, null, new BigDecimal("50"));
>>> 
>>>   }
>>> 
>>>   @Inject
>>>   private Coupons coupons;
>>> 
>>> }
>>> 
>>> @DomainService(repositoryFor = Coupon.class)
>>> public class Coupons extends AbstractTellmegenService {
>>> 
>>>   // {{ createCoupon (action)
>>>   @MemberOrder(sequence = "2.5.1")
>>>   public Coupon createCoupon(@ParameterLayout(named = "Code") final
>>> String code,
>>>           @ParameterLayout(named = "Start Date") final LocalDate
>>> startDate,
>>>           @ParameterLayout(named = "Due Date") final LocalDate dueDate,
>>>           @ParameterLayout(named = "Max Number of Kits") final Long
>>> maxNumberOfKits,
>>>           @ParameterLayout(named = "Percent Discount (0-100)")
>>> @Parameter(optionality = Optionality.OPTIONAL) final Integer
>>> percentDiscount,
>>>           @ParameterLayout(named = "Amount Discount (€)")
>>> @Parameter(optionality = Optionality.OPTIONAL) final BigDecimal
>>> amountDiscount) {
>>>       final Coupon coupon = this.newTransientInstance(Coupon.class);
>>> 
>>>       this.wrap(coupon).setCode(code);
>>>       this.wrap(coupon).setStartDate(startDate);
>>>       this.wrap(coupon).setDueDate(dueDate);
>>>       this.wrap(coupon).setMaxNumberOfOrders(maxNumberOfKits);
>>>       this.wrap(coupon).setPercentDiscount(percentDiscount);
>>>       this.wrap(coupon).setAmountDiscount(amountDiscount);
>>> 
>>>       // Save DB
>>>       this.persist(coupon);
>>>       this.getContainer().flush();
>>> 
>>>       return coupon;
>>>   }
>>> 
>>> 
>>> 
>>> But when executing from the Fixture Script, the following exception is
>>> thrown.
>>> Any ideas about how to avoid it?
>>> 
>>> I'm using the security add-on. Perhaps it must be initialized somewhere on
>>> the Fixture Script?
>>> 
>>> Thanks!
>>> 
>>> 
>>> 11:06:11,379  [WebAppContext        main       WARN ]  Failed startup of
>>> context
>>> o.e.j.w.WebAppContext{,file:/Users/oscarboubou/dev/tellmegen/dbtg/webapp/src/main/webapp/},src/main/webapp
>>> javax.servlet.ServletException: com.google.inject.ProvisionException:
>>> Guice provision errors:
>>> 
>>> 1) Error in custom provider,
>>> org.apache.isis.applib.services.wrapper.HiddenException: Reason: Could not
>>> locate application user for initialisation. Identifier:
>>> com.tellmegen.domain.model.order.coupon.Coupon#code()
>>> at
>>> org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132)
>>> at
>>> org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132)
>>> while locating org.apache.isis.core.runtime.system.IsisSystem
>>>   for field at
>>> org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.system(IsisWicketApplication.java:1)
>>> while locating webapp.application.TellMeGenApplication
>>> 
>>> 1 error
>>>       at
>>> org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:450)
>>>       at
>>> org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:351)
>>>       at
>>> org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:118)
>>>       at
>>> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
>>>       at
>>> org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:768)
>>>       at
>>> org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
>>>       at
>>> org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)
>>>       at
>>> org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)
>>>       at
>>> org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)
>>>       at
>>> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
>>>       at
>>> org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
>>>       at org.eclipse.jetty.server.Server.doStart(Server.java:282)
>>>       at
>>> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
>>>       at
>>> org.apache.isis.core.webserver.WebServerBootstrapper.bootstrap(WebServerBootstrapper.java:86)
>>>       at org.apache.isis.core.webserver.WebServer.run(WebServer.java:107)
>>>       at org.apache.isis.core.webserver.WebServer.main(WebServer.java:71)
>>>       at org.apache.isis.WebServer.main(WebServer.java:25)
>>> Caused by: com.google.inject.ProvisionException: Guice provision errors:
>>> 
>>> 1) Error in custom provider,
>>> org.apache.isis.applib.services.wrapper.HiddenException: Reason: Could not
>>> locate application user for initialisation. Identifier:
>>> com.tellmegen.domain.model.order.coupon.Coupon#code()
>>> at
>>> org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132)
>>> at
>>> org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132)
>>> while locating org.apache.isis.core.runtime.system.IsisSystem
>>>   for field at
>>> org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.system(IsisWicketApplication.java:1)
>>> while locating webapp.application.TellMeGenApplication
>>> 
>>> 1 error
>>>       at
>>> com.google.inject.internal.Errors.throwProvisionExceptionIfErrorsExist(Errors.java:451)
>>>       at
>>> com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:65)
>>>       at
>>> com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:944)
>>>       at
>>> org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.init(IsisWicketApplication.java:256)
>>>       at
>>> webapp.application.TellMeGenApplication.init(TellMeGenApplication.java:204)
>>>       at
>>> org.apache.wicket.Application.initApplication(Application.java:823)
>>>       at
>>> org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:424)
>>>       ... 16 more
>>> Caused by: org.apache.isis.applib.services.wrapper.HiddenException:
>>> Reason: Could not locate application user for initialisation. Identifier:
>>> com.tellmegen.domain.model.order.coupon.Coupon#code()
>>>       at
>>> org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.toException(DomainObjectInvocationHandler.java:713)
>>>       at
>>> org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.notifyListenersAndVetoIfRequired(DomainObjectInvocationHandler.java:681)
>>>       at
>>> org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.checkVisibility(DomainObjectInvocationHandler.java:663)
>>>       at
>>> org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.handleSetterMethodOnProperty(DomainObjectInvocationHandler.java:387)
>>>       at
>>> org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.invoke(DomainObjectInvocationHandler.java:216)
>>>       at
>>> org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForJavassist$1.invoke(ProxyInstantiatorForJavassist.java:52)
>>>       at
>>> com.tellmegen.domain.model.order.coupon.Coupon_$$_jvstc93_5.setCode(Coupon_$$_jvstc93_5.java)
>>>       at
>>> com.tellmegen.domain.model.order.coupon.Coupons.createCoupon(Coupons.java:36)
>>>       at
>>> com.tellmegen.fixture.model.orders.TwentyPercentForTwoOrdersCoupon.execute(TwentyPercentForTwoOrdersCoupon.java:35)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:528)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:498)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChild(FixtureScript.java:487)
>>>       at
>>> com.tellmegen.fixture.TellMeGenDemoFixture.execute(TellMeGenDemoFixture.java:58)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:528)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:498)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChild(FixtureScript.java:487)
>>>       at
>>> com.tellmegen.fixture.TellMeGenDemoWithAllRecordsFixture.execute(TellMeGenDemoWithAllRecordsFixture.java:25)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.access$0(FixtureScript.java:546)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript.run(FixtureScript.java:719)
>>>       at
>>> org.apache.isis.applib.fixturescripts.FixtureScript.install(FixtureScript.java:814)
>>>       at
>>> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixture(FixturesInstallerDelegate.java:205)
>>>       at
>>> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtureInTransaction(FixturesInstallerDelegate.java:171)
>>>       at
>>> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:158)
>>>       at
>>> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:138)
>>>       at
>>> org.apache.isis.core.runtime.fixtures.FixturesInstallerAbstract.installFixtures(FixturesInstallerAbstract.java:42)
>>>       at
>>> org.apache.isis.core.runtime.systemusinginstallers.IsisSystemAbstract.installFixturesIfRequired(IsisSystemAbstract.java:85)
>>>       at
>>> org.apache.isis.core.runtime.system.IsisSystemFixturesHookAbstract.init(IsisSystemFixturesHookAbstract.java:128)
>>>       at
>>> org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:133)
>>>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>       at
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>>       at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>       at java.lang.reflect.Method.invoke(Method.java:606)
>>>       at
>>> com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
>>>       at
>>> com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
>>>       at
>>> com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
>>>       at
>>> com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
>>>       at
>>> com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
>>>       at com.google.inject.Scopes$1$1.get(Scopes.java:65)
>>>       at
>>> com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
>>>       at
>>> com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53)
>>>       at
>>> com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110)
>>>       at
>>> com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75)
>>>       at
>>> com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73)
>>>       at
>>> com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
>>>       at
>>> com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:73)
>>>       at
>>> com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:60)
>>>       ... 21 more
>>> 11:06:11,449  [AbstractConnector    main       INFO ]  Started
>>> SelectChannelConnector@0.0.0.0:8080


Óscar Bou Bou
Responsable de Producto
Auditor Jefe de Certificación ISO 27001 en BSI
CISA, CRISC, APMG ISO 20000, ITIL-F

   902 900 231 / 620 267 520
   http://www.twitter.com/oscarbou <http://www.twitter.com/oscarbou>

   http://es.linkedin.com/in/oscarbou <http://es.linkedin.com/in/oscarbou>

   http://www.GesConsultor.com <http://www.gesconsultor.com/> 




Este mensaje y los ficheros anexos son confidenciales. Los mismos contienen 
información reservada que no puede ser difundida. Si usted ha recibido este 
correo por error, tenga la amabilidad de eliminarlo de su sistema y avisar al 
remitente mediante reenvío a su dirección electrónica; no deberá copiar el 
mensaje ni divulgar su contenido a ninguna persona.
Su dirección de correo electrónico junto a sus datos personales constan en un 
fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la de mantener 
el contacto con Ud. Si quiere saber de qué información disponemos de Ud., 
modificarla, y en su caso, cancelarla, puede hacerlo enviando un escrito al 
efecto, acompañado de una fotocopia de su D.N.I. a la siguiente dirección: 
Gesdatos Software, S.L. , Paseo de la Castellana, 153 bajo - 28046 (Madrid), y 
Avda. Cortes Valencianas num. 50, 1ºC - 46015 (Valencia). Asimismo, es su 
responsabilidad comprobar que este mensaje o sus archivos adjuntos no contengan 
virus informáticos, y en caso que los tuvieran eliminarlos.





Reply via email to