//Copyright 2020 Siemens Digital Industries Software
//==================================================
//Copyright $2020.
//Siemens Product Lifecycle Management Software Inc.
//All Rights Reserved.
//==================================================
//Copyright 2020 Siemens Digital Industries Software

/*==================================================================================================
File description:
    This file contains the declaration for the Business Object, BOMLine
    Filename:   BOMLine.hxx
    Module:     bom
    @BMIDE autogenerated
==================================================================================================*/

#ifndef TEAMCENTER__BOMLINE__HXX
#define TEAMCENTER__BOMLINE__HXX

#include <unidefs.h>
#include <vector>
#include <string>
#include <metaframework/BulkInput.hxx>
#include <metaframework/BulkData.hxx>
#include <map>
#include <fclasses/error_map.hxx>
#include <common/tc_deprecation_macros.h>
#include <metaframework/RuntimeBusinessObject.hxx>

#include <bom/libbom_exports.h>

namespace Teamcenter
{
    class BOMLine;
}
namespace Teamcenter
{
    class BOMLineImpl;
}
namespace Teamcenter
{
    class BOMLineDelegate;
}
namespace Teamcenter
{
    class BOMLineDispatch;
}
namespace Teamcenter
{
    class BOMLineGenImpl;
}
namespace Teamcenter
{
    class RootObjectImpl;
}

class  BOM_API  Teamcenter::BOMLine
     : public  ::Teamcenter::RuntimeBusinessObject
{
public:

    /**
     * Get the Interface Name
     * @return - return desc for getInterfaceName
     */
    static const std::string&  getInterfaceName();


    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 8.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_has_attached_notes( bool &value, bool &isNull ) const;

    ///
    /// Getter for a string Property
    /// @version Tc 8
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_jt_hint_contents( std::string &value, bool &isNull ) const;

    ///
    /// Getter for an Integer Property
    /// @version Teamcenter 8.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_occ_int_order_no( int &value, bool &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_children( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0BiDirectional( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0RelationTypeName( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0RelToOrigin( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0SourceID( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0SourceIDFormatType( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0TargetID( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0TargetIDFormatType( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.4
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_physical_attach_mfg0TCPFPosition( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an Integer Array Property
    /// @version Teamcenter 11.2.2
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_resource_color( std::vector< int > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 8.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getBl_window_is_BOPWin( bool &value, bool &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 11.5
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0AssignedToProcess( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for a string Property
    /// @version Teamcenter 8.3
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_ac_check_result( std::string &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 8.2
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_active_changes( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for a Tag Property
    /// @version Teamcenter 8.2
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_active_markup( tag_t &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 11.6
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_alternate_groups( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 8.3
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_assigned_as( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an Integer Property
    /// @version Teamcenter 11.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_closurerule_state( int &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 9
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_complying_objects( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an Integer Property
    /// @version Teamcenter 11.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_configured_out( int &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 9
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_defining_objects( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 8.2
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_has_active_markup( bool &value, bool &isNull ) const;

    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 11.6
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_has_alternate_group( bool &value, bool &isNull ) const;

    ///
    /// Getter for an Integer Property
    /// @version Teamcenter 9
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_has_trace_link( int &value, bool &isNull ) const;

    ///
    /// Getter for an Integer Property
    /// @version Teamcenter 10.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_is_mono_override( int &value, bool &isNull ) const;

    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 10.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_is_mono_present( bool &value, bool &isNull ) const;

    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 10.1
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_is_substitute( bool &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 8.2
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_markup_add_objs( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 8.2
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_markup_prop_names( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an String Array Property
    /// @version Teamcenter 8.2
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_markup_prop_values( std::vector< std::string > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for a Tag Property
    /// @version Teamcenter 8.2
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_markup_replace_obj( tag_t &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 8.2
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_markup_subs_objs_add( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 8.2
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_markup_subs_objs_del( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for an Integer Property
    /// @version Teamcenter 8.2
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_markup_type( int &value, bool &isNull ) const;

    ///
    /// Getter for a string Property
    /// @version Teamcenter 8.3
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_real_quantity( std::string &value, bool &isNull ) const;

    ///
    /// Getter for a string Property
    /// @version Teamcenter 10.1
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_sub_id_compare( std::string &value, bool &isNull ) const;

    ///
    /// Getter for a string Property
    /// @version Teamcenter 10.1
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_sub_name_compare( std::string &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Array Property
    /// @version Teamcenter 11.6
    /// @param values - Parameter value
    /// @param isNull - Returns true for an array element if the parameter value at that location is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0bl_substitute_groups( std::vector< tag_t > &values, std::vector< int > &isNull ) const;

    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 11.5
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0HasReflection( bool &value, bool &isNull ) const;

    ///
    /// Getter for a Boolean Property
    /// @version Teamcenter 11.2.3
    /// @param value - Parameter Value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0IsConfiguredForNetEff( bool &value, bool &isNull ) const;

    ///
    /// Getter for a Tag Property
    /// @version Teamcenter 12.2
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0OccurrenceRevision( tag_t &value, bool &isNull ) const;

    ///
    /// Getter for a string Property
    /// @version Teamcenter 11.2.3
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getFnd0UnitNetEffectivity( std::string &value, bool &isNull ) const;

    ///
    /// Setter for a Tag Array Property
    /// @version Teamcenter 8.1
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_occ_effectivity( const std::vector< tag_t > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an Integer Property
    /// @version Teamcenter 8.1
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setBl_occ_int_order_no( int value, bool isNull=false );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_children( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0BiDirectional( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0RelationTypeName( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0RelToOrigin( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0SourceID( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0SourceIDFormatType( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0TargetID( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0TargetIDFormatType( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for an string Array Property
    /// @version Teamcenter 11.4
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_physical_attach_mfg0TCPFPosition( const std::vector< std::string > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for a string Property
    /// @version Teamcenter 9
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setBl_quantity( const std::string &value, bool isNull=false );

    ///
    /// Setter for an Integer Array Property
    /// @version Teamcenter 11.2.2
    /// @param values - Values to be set for the paramter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setBl_resource_color( const std::vector< int > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for a string Property
    /// @version Teamcenter 9
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setBl_sequence_no( const std::string &value, bool isNull=false );

    ///
    /// Setter for a string Property
    /// @version Teamcenter 8.3
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setFnd0bl_ac_check_result( const std::string &value, bool isNull=false );

    ///
    /// Setter for a Tag Array Property
    /// @version Teamcenter 8.2
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setFnd0bl_active_changes( const std::vector< tag_t > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for a Tag Property
    /// @version Teamcenter 8.2
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setFnd0bl_active_markup( const tag_t &value, bool isNull=false );

    ///
    /// Setter for a Tag Array Property
    /// @version Teamcenter 11.6
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setFnd0bl_alternate_groups( const std::vector< tag_t > &values, const std::vector< int > *isNull=0 );

    ///
    /// Setter for a Boolean Property
    /// @version Teamcenter 8.2
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setFnd0bl_has_active_markup( bool value, bool isNull=false );

    ///
    /// Setter for an Integer Property
    /// @version Teamcenter 10.1
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setFnd0bl_is_mono_override( int value, bool isNull=false );

    ///
    /// Setter for a Tag Array Property
    /// @version Teamcenter 11.6
    /// @param values - Values to be set for the parameter
    /// @param isNull - If array element is true, set the parameter value at that location as null
    /// @return - Status. 0 if successful
    ///
    int  setFnd0bl_substitute_groups( const std::vector< tag_t > &values, const std::vector< int > *isNull=0 );

    ///
    /// This operation is defined for implementation pre and post assign actions.
    /// @version Teamcenter 10.1
    /// @param sourceLine - Source line
    /// @param occType - Occurrence type.
    /// @param newChildLine - The new created line.
    /// @return - Return OK if operation is succeded.
    ///
    int  fnd0assignChildLine( tag_t sourceLine, char *occType, tag_t *newChildLine );

    ///
    /// This operation is defined for implementation pre and post assign actions on Cut-Paste operation.
    /// @version Teamcenter 11.1
    /// @param parent_tag - This is the Parent Tag where the the lines will be pasted.
    /// @param count - This is number of lines to be cut & pasted
    /// @param source_bomlines - Set of source BOMLines to be cut
    /// @param target_bomlines - Set of bomlines which would be available after succesfull paste
    /// @return - 
    ///
    int  fnd0bomline_move( tag_t parent_tag, const int count, tag_t *source_bomlines, tag_t **target_bomlines );

    ///
    /// Copy Line operation is invoked on the parent BOM Line to create a new child BOM Line based on lineToCopy.  If viewType is provided it is used to create a new BOM View/BOMView Revision on the parent BOM Line if one does not exist.
    /// @version Teamcenter 13.1
    /// @param lineToCopy - mandatory, tag of BOMLine to copy
    /// @param viewType - optional, tag of BOMView to create if there is none
    /// @param newLine - tag of resulting BOMLine
    /// @return - Returns an integer status, 0 if successful.
    ///
    int  fnd0CopyLine( tag_t lineToCopy, tag_t viewType, tag_t *newLine );

    ///
    /// This operation will be called when a client calls the cloneStructure SOA API to duplicate a structure in Teamcenter. This operation will allow a customer or CAD integration to register pre and post actions on the duplicate functionality. This will help customers and CAD integrations to perform validation on data to be duplicated and also help resolve special needs that the base duplication logic does not cover.
    /// @version Teamcenter 11.1
    /// @param topLine - The parent that will be processed, traversed and cloned during the duplication process. This is  BOMLine when running Synchronous mode and ItemRevision when running Asynchronous mode.
    /// @param topLineResult - This contains the result of the topLine being duplicated. The results are tracked using the Teamcenter::CloneStructureTopLineData runtime business object. The new runtime business object will contain the following properties:
    ///                        
    ///                        Teamcenter::BOMLine bomline;
    ///                        Teamcenter::ItemRevision orignalItemRev;
    ///                        Teamcenter::ItemRevision clonedNewItemRev;
    ///                        int status;
    /// @return - failure status
    ///
    int  fnd0Duplicate( const tag_t *topLine, tag_t *topLineResult );

    ///
    /// This operation will be called when a client calls the cloneStructureExpandOrUpdate SOA API to query for CAD dependent data related to the structures to be duplicated in Teamcenter. This operation will allow a customer or CAD integration to register pre and post actions on the duplicateExpandOrUpdate functionality. This will help customers and CAD integrations to return CAD dependencies that Teamcenter would not be aware of since typically this type of dependency is not published in Teamcenter.
    /// @version Teamcenter 11.1
    /// @param bomlines - This is a list of BOMLines that needs to be expanded and queried for CAD dependencies based on the user selected CAD options. CAD dependency queries will be performed on the BOMLines children.
    /// @param itemRevisions - This is a list of ItemRevisions that needs to be queried for CAD dependencies based on the user selected CAD options.
    /// @param cadOptions - This is a list of user selected CAD options to perform a query on the bomline or the itemRevisions parameter.
    /// @param selectionOption - This is a flag for project auto selection. When the value is 1, the system will check the input lines based on the top BOMLine item's project assignment. If any child belongs to the project, then the parent BOMLine will be returned otherwise the parent BOMLine will not be returned. When the value is 0, the operation will do expansion only.
    /// @param updatedObjects - This is a list of ItemRevisions that needs to be updated in the client UI because it has user selected CAD option Dependencies on them.
    /// @param cadDependencies - This list contains the dependency information that ties the structure itemRevision to the dependency child. The dependency information are tracked using the Teamcenter::CloneStructureCADDependencyData runtime business object. To use the new runtime business object please refer to the CloneStructureCADDependencyData runtime BMIDE documentation to see the properties defined for this object.
    /// @return - failure status
    ///
    int  fnd0DuplicateExpandOrUpdate( const std::vector< tag_t > *bomlines, const std::vector< tag_t > *itemRevisions, const std::vector< std::string > *cadOptions, const int *selectionOption, std::vector< tag_t > *updatedObjects, std::vector< tag_t > *cadDependencies );

    ///
    /// Expands a set of BOM Lines from the same BOM Window, each to one level. The order of the returned child BOM Lines is not guaranteed.The parameter expansionCriteria is a set of bitwise or-ed flags controlling the expansion behavior, see Expansion Criteria Flags.
    /// @version Teamcenter 12.2
    /// @param bulkInput - Bulk Input containing the input parent BOMLines that need to be expanded.
    /// @param bd - Bulk Data required for bulk processiong of the inputs.
    /// @param expansionCriteria - Contains bit flags controlling expansion behavior. Refer to the section #Expansion_Criteria.
    /// @param occurenceThreads - Occurrence thread tags used in filter by occurrence threads.
    /// @param occurenceThreadParents - BOMLine tags of parent BOMLine for each occurrence thread, used in filter by occurrence threads.
    /// @param parentLinesToChildLinesMap - Map containing keys as the parent input lines and values as their respective children.
    /// @param errorMap - Map of all the errors during the expansion of the Parent Lines.
    /// @return - 
    ///
    static int  fnd0ExpandLines( std::vector<  ::Teamcenter::BulkInput* > *bulkInput, ::Teamcenter::BulkData *bd, int expansionCriteria, std::vector< tag_t > *occurenceThreads, std::vector< tag_t > *occurenceThreadParents, std::map< tag_t,std::vector< tag_t > > *parentLinesToChildLinesMap,  ::Teamcenter::ErrorMap *errorMap );
protected:
    //  Method to initialize
    virtual void initialize( ::Teamcenter::RootObjectImpl*  impl );

    /**
     * Constructor
     */
    BOMLine();

    /**
     * Destructor
     */
    virtual ~BOMLine();

private:
    //  Getter method for the Implementation Object
    BOMLineImpl*  getBOMLineImpl() const;
    //  Setter method for the Implementation Object
    ::Teamcenter::RootObjectImpl*  setBOMLineImpl( ::Teamcenter::RootObjectImpl*  impl );

    //  Method to set the delete impl boolean
    void setDeleteImpl( bool  del );

    // Pointer to the Implementation object
    BOMLineImpl*  m_bomlineImpl;

    //  Flag to indicate if Implementation object needs to be deleted
    bool  m_deleteImpl;

    /**
     * Name of the Business Object
     */
    static std::string  name;

    /**
     * Private default constructor. We do not want this class instantiated without the business object passed in.
     * @param BOMLine - desc for BOMLine parameter
     */
    BOMLine( const BOMLine& );
    BOMLine& operator=( const BOMLine& );

    friend class  BOMLineDelegate;
    friend class  BOMLineDispatch;
    friend class  BOMLineGenImpl;
};

#include <bom/libbom_undef.h>
#endif //   TEAMCENTER__BOMLINE__HXX
