Skip to main content
Answer

Creating grid hyperlink fails compile with error

  • April 25, 2023
  • 11 replies
  • 184 views

Forum|alt.badge.img
I tried following the instructions from the link below to create a hyperlink in a grid; however, I am receiving an error message during validation/compile, (error message below. The code snippet also here shows what I have written.
    public PXAction<CRCase> ViewCase;
[PXButton]
protected virtual void viewCases()
{
CRCase row = CasesGraphView.Current;
string caseCD = row.Casecd;

CRCase casenbr = PXSelect<CRCase, Where<CRCase.casecd, Equal<Required<CRCase.casecd>>>>.Select(this.Base,row.Casecd);

CRCaseMaint graph = PXGraph.CreateInstance<CRCaseMaint>();
graph.Case.Current = casenbr;

if (graph.Case.Current != null)
{
throw new PXRedirectRequiredException(graph, true, "Cases");
}

}
How to create a hyperlink user field in a grid
error CS0029: Cannot implicitly convert type 'CustomerCasesTab.CRCase' to 'PX.Objects.CR.CRCase'

Does anyone have some direction on what I have done wrong here?

Best answer by darylbowman

I believe that anywhere you use CRCase, the compiler is going to use your custom class, since that is "closer", being in your namespace rather than in a referenced library.

If you can't eliminate the custom class, you could do something like a 

 

using BaseCase = PX.Objects.CR.CRCase;

(at the top with the other 'usings')

Then replace CRCase with BaseCase wherever you use it.

11 replies

Forum|alt.badge.img+7
  • Captain II
  • April 25, 2023

What line is the error message indicating is the problem?  I suspect the first line in the method. You might just need to change it to:

var row = CasesGraphView.Current;


Forum|alt.badge.img
  • Freshman II
  • April 25, 2023

the easiest way to use the hyperlink.
Here are some tips.

Simple you must add this example, so that you no longer do many jobs.

       1. inside Dac you must use pxselector and then call you and it will create a hyperlink.

            #region RefNbr
            [PXDBString(15, IsUnicode = true, IsKey = true)]
            [PXUIField(DisplayName = "Referencia")]
            [PXSelector(typeof(Search<APRegister.refNbr>))]
            public virtual string RefNbr { get; set; }
            public abstract class refNbr : PX.Data.BQL.BqlString.Field<refNbr> { }
            #endregion

 

      Step 2

3.- Result

 


Forum|alt.badge.img
  • Author
  • Varsity I
  • April 25, 2023

Django, My apologies.  The statement that is failing is 

        graph.Case.Current = casenbr;

 

Setting “var row = CasesGraphView.Current();” made no difference.


Forum|alt.badge.img
  • Author
  • Varsity I
  • April 25, 2023

I realized I probably should include the full code as the error message references the namespace.  Here is the full code of customization.

Again, the validation/compiler is failing on the statement
graph.Case.Current = casenbr;

Thank you!

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using PX.Api;
using PX.Common;
using PX.Data;
using PX.SM;
using PX.Objects.AR.CCPaymentProcessing;
using PX.Objects.AR.Repositories;
using PX.Objects.Common;
using PX.Objects.Common.Discount;
using PX.Objects.CA;
using PX.Objects.CM;
using PX.Objects.CR;
using PX.Objects.CR.Extensions;
using PX.Objects.CS;
using PX.Objects.SO;
using PX.Objects.AR.CCPaymentProcessing.Helpers;
using PX.Data.BQL.Fluent;
using PX.Data.BQL;
using PX.Data.Descriptor;
using CashAccountAttribute = PX.Objects.GL.CashAccountAttribute;
using PX.Objects.GL.Helpers;
using PX.Objects.TX;
using PX.Objects.IN;
using PX.Objects.CR.Extensions.Relational;
using PX.Objects.CR.Extensions.CRCreateActions;
using PX.Objects.GDPR;
using PX.Objects.GraphExtensions.ExtendBAccount;
using PX.Data.ReferentialIntegrity.Attributes;
using CRLocation = PX.Objects.CR.Standalone.Location;
using PX.Objects;
using PX.Objects.AR;


namespace CustomerCasesTab

{
public class CustomerMaint_Extension : PXGraphExtension<PX.Objects.AR.CustomerMaint>
{
#region Selects

public PXSelect<CRCase, Where<CRCase.customerID, Equal<Current<Customer.bAccountID>>>> CasesGraphView;

#endregion

#region Event Handlers

#endregion


public PXAction<CRCase> ViewCase;
[PXButton]
protected virtual void viewCases()
{
CRCase row = CasesGraphView.Current;
string caseCD = row.Casecd;

CRCase casenbr = PXSelect<CRCase, Where<CRCase.casecd, Equal<Required<CRCase.casecd>>>>.Select(this.Base,row.Casecd);

CRCaseMaint graph = PXGraph.CreateInstance<CRCaseMaint>();
graph.Case.Current = casenbr;

if (graph.Case.Current != null)
{
throw new PXRedirectRequiredException(graph, true, "Cases");
}

}

}
}

 


Forum|alt.badge.img+7
  • Captain II
  • April 25, 2023

Hmmm…  not sure. You might want to check that your view’s CRCase is indeed the same as the CRCase that the graph is expecting. There might be two different declarations and you need to force your declaration to match. Something like PX.Objects.CR.Standalone.CRCase (this is a guess). If you enter your code in Visual Studio, it should be table to tell you where it thinks that the declaration is coming from.

As an aside, I would recommend changing that code to make use of the PK function/method.  I find it to behave better than PXSelect.

CRCase casenbr = CRCase.PK.Find(Base,row.Casecd);

darylbowman
Captain II
Forum|alt.badge.img+15
 
error CS0029: Cannot implicitly convert type 'CustomerCasesTab.CRCase' to 'PX.Objects.CR.CRCase'

Does anyone have some direction on what I have done wrong here?

 

CustomerCasesTab.CRCase makes it sound like you have a class called CRCase defined within your namespace. Is there any chance it’s referencing a different code file in the customization package?

Also, that’s an incredible amount of references. In my experience, they do nothing but cause issues. I’d work through commenting a bunch out at a time until you have just what you need, or if you’re using Visual Studio, use the ‘Remove and sort usings’.


Forum|alt.badge.img
  • Author
  • Varsity I
  • April 25, 2023

@darylbowman Yeah, I agree about those references.  They were added before I picked up this customization by someone else.  I will try and clean those up once I have solved this issue.

In this particular customization there is a new DAC, which appears to have been created from CRCase originally.  I can post it here if you think there is value in looking to see if that is part of the issue.

Thank you for your help,

 


darylbowman
Captain II
Forum|alt.badge.img+15

I'm guessing that's exactly what's wrong. You are trying to assign a custom CRCase to the CR.CRCase view's Current property. That's not gunna work.

 

You could specify the variable declaration to be of type PX.Objects.CR.CRCase.


Forum|alt.badge.img
  • Author
  • Varsity I
  • April 26, 2023

@darylbowman Ah, that makes perfect sense.  Where would that PX.Objects.CR.CRCase. go?  Or should I look to rewrite this changing the namespace to “namespace PX.Objects.CR”?   Which would be the better way to go?


darylbowman
Captain II
Forum|alt.badge.img+15
  • Answer
  • April 26, 2023

I believe that anywhere you use CRCase, the compiler is going to use your custom class, since that is "closer", being in your namespace rather than in a referenced library.

If you can't eliminate the custom class, you could do something like a 

 

using BaseCase = PX.Objects.CR.CRCase;

(at the top with the other 'usings')

Then replace CRCase with BaseCase wherever you use it.


Forum|alt.badge.img
  • Author
  • Varsity I
  • April 26, 2023

I went ahead and completely rewrote that entire customization and even cleaned up the references.  Using a new namespace corrected my error and I was able to complete a hyperlink creation for the grid.

Thank you all for your help,